[New Binding] Ambient Weather WS-1400IP weather station

Thanks @matt1 it works perfect :slight_smile:

Hi! i found a refurbished Waldbeck Halley and was very optimistic that i’d be able to make it work like Pedro did but i’m not so sure anymore… can’t even get the device to connect to wunderground…

has anyone an idea where i could get the wired “ip observer” in europe? maybe i’ll get it working with some help form Pedro but i think it wouldn’t be wrong to look for an alternative :slight_smile:

There are three different frequencies that they are made in so be sure to order one that matches, see post of mine that lists them and what brand has which frequency. Misol ones are sold separately on AliExpress for around $50 without power supply.

1 Like

i may be blind, but where can i find the .jar for openhab2?
i found only 3.10 Snapshop, all the other links are dead :frowning:

V2 jar which will have breaking changes if u upgrade or read latest documentation

https://github.com/Skinah/ambientweather1400ip/releases/tag/2.5.10

i’m definitely blind :face_with_raised_eyebrow:
your link ends in 404

i’m not planning on upgrading soon… v3 binding probably won’t work with oh2, will it?

I had it marked as private so try again now. There are V3.0 builds that won’t have breaking changes however they may stop working in 3.1 and will need the newer built from the ground up binding that is waiting to be merged.

V3 is a lot better but each person needs to weigh up the time needed to convert over. 3.1 stable is probably not too far away and setting up a fresh system whilst keeping your production 2.5 going would be a good idea if you run on a pi or docker.

thank you!

Had it running since May without any issues. Precompiled JARs worked on OH3.0 and 3.1 perfectly for me. Thanks!! @matt1
Not sure if you changed it already, but in May the Semantic Property, Class…of the channels were not preconfigured. Maybe this could save time when setting up all the items from the thing.

What will be the name of the binding once merged? (Too confused by all the names IPObserver, wundergroundupdatereceiver, wheatherunderground, Ambient Weather…)

Different bindings are available and what each one offers as there is some overlap.

weatherunderground = monthly subscription to source data from the cloud and can work with no weather station as you can use any in your area that someone else owns. Won’t work during a storm when your internet goes down.

wundergroundupdatereceiver = Captures the data fully locally before it is sent out to weatherunderground. No cloud connection and hence no monthly subscription needed, but you need a weather station. Hard to setup if your station does not allow redirecting the data easily, but it is very easy if your unit allows you to enter the IP of where to send the weatherunderground data. Supports a wide range of units and won’t need a ipobserver unit if you have a screen that sends updates to WU.

Ambient Weather = only works with units of that brand and it requires their cloud and a working internet connection, which can go down during a storm. This brand only ships inside the USA so the majority of the world can’t source them. Easy setup.

Ipobserver = this binding is fully local with no clouds and is easy to setup with discovery now added, BUT you have to have the ipobserver unit which is sold world wide under many brands. Sadly the wifi version looks to not have a live data page to scrape otherwise it could be supported. Make sure it is the non wifi version.

Thanks for the feedback I’ll take a look at the categories when I have some time.

Do you know of any binding that does this so I can look at how that X binding does it? I tried and had no luck so far.

Could only find binding like Astro (astro:sun:local) where Name, Label, Type is preconfigured. Was not able to find a binding with more preconfiguration. Maybe this is not possible. Category (empty), Semantic Class (always Point) Semantic property (always None) for all.

@maxico
I have uploaded a newer version which has bug fixes, improvements and the tags you wanted in place for class and property.

Currently you need to add the equipment and not single points one at a time for it to work until a future OH3.2 milestone version. I have seen a number of PR being made at the moment that should mean this is greatly improved soon.

Anyone that upgrades to this newer version will need to delete and re-add the things and some channels may need new items created or the existing ones changed to match the item type listed in the readme.md file.

Is it the link where I can download from? Releases · Skinah/ambientweather1400ip · GitHub
I see releases from 2020 here. I use 3.1 release build now and I’d like to try it if possible.

My guess is that openHAB 3.2 milestone 1 is probably days away and the new binding will be built into that release.

Until then, you can download a Jenkins build here which will work on 3.1 Stable:
Artifacts of openHAB-Addons #432 : /bundles/org.openhab.binding.ipobserver/target [Jenkins]

And read the docs here:
IpObserver - Bindings | openHAB

hi!
3.2M1 is here and i installed the IpObserver Binding.
i have a wifi version BUT with the help from @Atsz i was able to create http:ipadress/livedata.htm and this worked on openHAB 2.5 / with this

with the new binding i get this error every 20 seconds:

2021-08-05 16:30:42.926 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'ipobserver:weatherstation:e3f2de4be9' changed from OFFLINE (COMMUNICATION_ERROR): IpObserver request failed with 404: Not Found to ONLINE
2021-08-05 16:30:42.933 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'ipobserver:weatherstation:e3f2de4be9' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): IpObserver request failed with 404: Not Found

the binding on my old/stable oh2.5 setup still works without problems.
http:ipadress/livedata.htm is accessible

If you want to use this binding you will need to serve an extra file that tells the binding what format the data is in, metric/imperial. Happy to give an example page source to base it from. However there is a new method you should check out that is about to get merged here. Let me know if you want the details of the settings page to emmulate to still use this binding.

[wundergroundupdatereceiver] Initial contribution by danieldemus · Pull Request #10105 · openhab/openhab-addons (github.com)

merged “here” means which binding exactly? ipobserver? ambient WS?

yes, i’d really like to try that!

This is a static page and is only needed for the binding to work out what units you are using for each measurement.

/station.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Station</title>
        <link href="axcss0.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <table width="800" border="0" align="center" cellpadding="0" cellspacing="0">
            <tr>
                <td colspan="2" align="right" bgcolor="#0088F7">&nbsp;</td>
            </tr>
            <tr>
                <td colspan="2" bgcolor="#FFFFFF"><table border="0" cellpadding="0" cellspacing="0">
                        <tr>
                            <td width="20" height = "80">&nbsp;</td>                                             
                            <td >&nbsp;</td>
                            <td width="10">&nbsp;</td>
                            <td class="txtstyle_1" >Weather Logger  2.2 </td>                                   
                        </tr>
                </table></td>
            </tr>
            <tr> 
                <td colspan="2" align="right" bgcolor="#60B7FF"><table border="0" cellpadding="0" cellspacing="0">
                        <tr>
                            <td width="120" align="center"><font color="#FFFFFF" face="Arial, Helvetica, sans-serif"><em>Version:2.2.5</em></font></td>
                        </tr>
                </table></td>
            </tr>
            <tr>
                <td colspan="2" align="left" bgcolor="#C0C0C0">
                    <table width="20" border="0" cellpadding="0" cellspacing="0">
                        <tr>          
                            <td bgcolor="#C0C0C0"><div class="menuitem_1"><a href="bscsetting.htm">Local Network</a></div></td>
                            <td bgcolor="#C0C0C0"><div class="menuitem_1"><a href="weather.htm">Weather Network</a></div></td>
                            <td bgcolor="#EDEFEF"><div class="menuitem_1"><a href="station.htm">Station Settings</a></div></td>
                            <td bgcolor="#C0C0C0"><div class="menuitem_1"><a href="livedata.htm">Live Data</a></div></td>
                            <td bgcolor="#C0C0C0"><div class="menuitem_1"><a href="correction.htm">Calibration</a></div></td>  
                        </tr>
                </table></td>
            </tr>
            <form name="station" method="POST" onsubmit="return chkForm(0);">
                <tr>
                    <td colspan="2" bgcolor="#EDEFEF"><div class="subitem_1">Wireless Transmitter Settings</div></td>
                </tr>
                <tr> 
                    <td bgcolor="#EDEFEF"><div class="item_1">Indoor Sensor Type</div></td>
                    <td bgcolor="#EDEFEF"><select name="WH25" class="item_2"  style="WIDTH: 80px">
                            <option value="0" selected >WH25</option>
                            <option value="1"          >None</option>
                    </select></td>
                </tr>

                <tr> 
                    <td bgcolor="#EDEFEF"><div class="item_1">Outdoor Sensor1 Type </div></td>
                    <td bgcolor="#EDEFEF"><select name="WH24_7B" class="item_2" style="WIDTH: 80px">
                            <option value="0" selected >WH24</option>
                            <option value="1"          >WH7</option>
                            <option value="2"          >None</option>
                    </select></td>
                </tr>
                <tr> 
                    <td bgcolor="#EDEFEF"><div class="item_1">Outdoor Sensor2 Type</div></td>
                    <td bgcolor="#EDEFEF"><select name="WH26" class="item_2" style="WIDTH: 80px">
                            <option value="0"  		   >WH26</option>
                            <option value="1" selected >None</option>
                    </select></td>
                </tr>
                <tr> 
                    <td width="419" bgcolor="#EDEFEF"><div class="item_1">Wireless Receive Frequency</div></td>
                    <td width="421" bgcolor="#EDEFEF"><select name="WRFreq" class="item_2" disabled="disabled"  style="WIDTH: 80px">
                            <option value="0" selected >434</option>
                            <option value="1"          >868</option>
                            <option value="2"          >915</option>
                            <option value="3"          >920</option>
                    </select></td>
                </tr>          
                 <tr>
                    <td colspan="2" bgcolor="#EDEFEF">&nbsp;</td>  
                </tr>     
                <tr>
                    <td colspan="2" bgcolor="#EDEFEF"><div class="subitem_1">DST and Time Zone Setting</div></td>
                </tr>
                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">Time Zone</div></td>
                    <td bgcolor="#EDEFEF"><input name="timezone" type="text" class="item_2" style="WIDTH: 80px" value="10" maxlength="4">
                        <span id="timezone_msg" class="errMsg0"></span></td>
                </tr>
                
                <tr>
                	<td bgcolor="#EDEFEF"></td>
                    <td bgcolor="#EDEFEF"><span class="setinfo">Please enter an integer between -12~12</span>
                    </td>
                </tr>	 
                            
                <tr> 
                    <td width="419" bgcolor="#EDEFEF"><div class="item_1">Daylight Savings Time </div></td>
                    <td width="421" bgcolor="#EDEFEF"><select name="dst" class="item_2"  style="WIDTH: 80px">
                            <option value="0"					   selected>off</option>
                            <option value="1"					  >on</option>
                            <option value="2" >auto</option>
                  </select></td>
                </tr> 
                
   				<tr>
                    <td colspan="2" bgcolor="#EDEFEF">&nbsp;</td>  
                </tr>    
                               
                <tr>
                    <td colspan="2" bgcolor="#EDEFEF"><div class="subitem_1">Units of Measure</div></td>
                </tr>
                <tr> 
                    <td bgcolor="#EDEFEF"><div class="item_1">Wind</div></td>
                    <td bgcolor="#EDEFEF"><select name="unit_Wind" class="item_2"  style="WIDTH: 80px">
                            <option value="0"  		   >m/s</option>
                            <option value="1"           selected>km/h</option>          
                            <option value="2"          >ft/s</option>
                            <option value="3"          >bft</option>
                            <option value="4" >mph</option>
                            <option value="5"          >knot</option>
                    </select></td>
                </tr>
                <tr> 
                    <td width="419" bgcolor="#EDEFEF"><div class="item_1">Rainfall</div></td>
                    <td width="421" bgcolor="#EDEFEF"><select name="u_Rainfall" class="item_2"  style="WIDTH: 80px">
                            <option value="0"  		    selected>mm</option>
                            <option value="1" >in</option>
                    </select></td>
                </tr>
                <tr> 
                    <td bgcolor="#EDEFEF"><div class="item_1">Pressure</div></td>
                    <td bgcolor="#EDEFEF"><select name="unit_Pressure" class="item_2" style="WIDTH: 80px">                                                
                            <option value="0"           selected>hpa</option>
                            <option value="1" >inhg</option>
                            <option value="2"          >mmhg</option>
                    </select></td>
                </tr>
                <tr> 
                    <td width="419" bgcolor="#EDEFEF"><div class="item_1">Temperature</div></td>
                    <td width="421" bgcolor="#EDEFEF"><select name="u_Temperature" class="item_2"  style="WIDTH: 80px">
                            <option value="0"  		    selected>degC</option>
                            <option value="1" >degF</option>
                    </select></td>
                </tr>               
                <tr> 
                    <td bgcolor="#EDEFEF"><div class="item_1">Solar Radiation</div></td>
                    <td bgcolor="#EDEFEF"><select name="unit_Solar" class="item_2" style="WIDTH: 80px">
                            <option value="0"            >lux</option>
                            <option value="1"	selected >w/m2</option>
                            <option value="2"  		     >fc</option>
                    </select></td>
                </tr>         
 				<tr>
                    <td colspan="2" bgcolor="#EDEFEF">&nbsp;</td>  
                </tr>
                <tr>
 					<td colspan="2" bgcolor="#EDEFEF"><div class="subitem_1">Automatic Restart</div></td>                
                </tr>
                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">System Reboot</div></td>
                    <td bgcolor="#EDEFEF"><select name="auto_reboot" class="item_2" style="WIDTH: 80px">
                            <option value="0"   >No</option>
                            <option value="1" selected>Yes</option>                       
                    </select></td>
                </tr> 
                
                 <tr>
                	<td bgcolor="#EDEFEF"></td>
                    <td bgcolor="#EDEFEF"><span class="setinfo">If server communication is lost for 20 minutes, the ObserverIP will automatically reboot.</span>
                    </td>
                </tr>	 
    
                <tr>
                    <td colspan="2" bgcolor="#EDEFEF">&nbsp;</td>  
                </tr>
                <tr><td colspan="2" align="center" bgcolor="#EDEFEF">
                        <input name="Apply" type="submit" class="item_2" style="WIDTH: 60px; HEIGHT: 24px;" onclick="setSubmitType(1)" value="Apply">
                        <input name="Cancel" type="reset" class="item_2" style="WIDTH: 60px; HEIGHT: 24px;" value="Cancel">
                </td></tr>
            </form>
            <tr>
                <td colspan="2" bgcolor="#EDEFEF">&nbsp;</td>
            </tr>
            <tr>
                <td colspan="2" bgcolor="#C0C0C0">&nbsp;</td>
            </tr>
        </table>
        <script src="axjs0.js" type="text/javascript"></script>
    </body>
</html>

I am interested to know where you are getting the sensor readings from? Is there a way to scrape the wifi to gather the information?

EDIT: You mentioned you used @Atsz script and from reading the description of what it does in this thread, it seems that it works the same way that the wundergroundupdatereceiver binding works. I don’t know if the Wunderground packets are the same as ecowitt format. However I did another experiment on my unit here and I seem to be able to capture the outgoing data very easily and this could be automated. The non wifi unit seems to send GET requests that contain all the data in the request queries.

example is:

GET:/weatherstation/updateweatherstation.php?ID=***********&PASSWORD=********&tempf=51.4&humidity=82&dewptf=46.2&windchillf=51.4&winddir=303&windspeedmph=0.00&windgustmph=0.00&rainin=0.00&dailyrainin=0.01&weeklyrainin=0.72&monthlyrainin=0.90&yearlyrainin=28.32&solarradiation=138.21&UV=2&indoortempf=59.5&indoorhumidity=59&baromin=30.26&lowbatt=0&dateutc=2021-8-7%203:3:40&softwaretype=WH2600GEN_V2.2.5&action=updateraw&realtime=1&rtfreq=5

If the wifi version does this exact same thing, then the wundergroundupdatereceiver can replace your script and served files.

Different bindings are available and 3 out of these 4 are merged AKA built into openHAB 3.1, what each one offers is exaplined below as there is some overlap.

weatherunderground = monthly subscription (free if u give them your stations data) to source data from the cloud and can work with no weather station as you can use any in your area that someone else owns. Won’t work during a storm when your internet goes down.

wundergroundupdatereceiver = Captures the data fully locally before it is sent out to weatherunderground. No cloud connection and hence no monthly subscription needed, but you need a weather station. Hard to setup if your station does not allow redirecting the data easily, but it is very easy if your unit allows you to enter the IP of where to send the weatherunderground data. Supports a wide range of units and you won’t need an ipobserver unit if you have a screen that sends updates to WU.

Ambient Weather = only works with units of that brand and it requires their cloud and a working internet connection, which can go down during a storm. This brand only ships inside the USA so the majority of the world can’t source them. Easy setup.

Ipobserver = this binding is fully local with no clouds and is easy to setup with discovery now added, BUT you have to have the ipobserver unit which is sold world wide under many brands. Sadly the wifi version looks to not have a live data page to scrape otherwise it could be supported. Make sure it is the non wifi version.

with station.htm i get different errors now:

2021-08-07 20:37:29.433 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'ipobserver:weatherstation:e3f2de4be9' changed from INITIALIZING to UNKNOWN
==> /var/log/openhab/openhab.log <==
2021-08-07 20:37:31.511 [DEBUG] [pobserver.internal.IpObserverHandler] - Finding out which units of measurement the weather station is using.
==> /var/log/openhab/events.log <==
2021-08-07 20:37:31.512 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'ipobserver:weatherstation:e3f2de4be9' changed from UNKNOWN to ONLINE
==> /var/log/openhab/openhab.log <==
2021-08-07 20:37:31.659 [DEBUG] [pobserver.internal.IpObserverHandler] - Using metric units of measurement for temperature.
2021-08-07 20:37:31.660 [DEBUG] [pobserver.internal.IpObserverHandler] - Using metric units of measurement for rain.
2021-08-07 20:37:31.670 [DEBUG] [pobserver.internal.IpObserverHandler] - Could not parse 13:27 9/30/2020 as a valid dateTime
2021-08-07 20:37:31.672 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception: 
java.lang.NumberFormatException: For input string: "1,046.50"
	at jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054) ~[?:?]
	at jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110) ~[?:?]
	at java.lang.Double.parseDouble(Double.java:543) ~[?:?]
	at org.openhab.binding.ipobserver.internal.IpObserverHandler$ChannelHandler.processValue(IpObserverHandler.java:130) ~[?:?]
	at org.openhab.binding.ipobserver.internal.IpObserverHandler.parseAndUpdate(IpObserverHandler.java:187) ~[?:?]
	at org.openhab.binding.ipobserver.internal.IpObserverHandler.sendGetRequest(IpObserverHandler.java:212) ~[?:?]
	at org.openhab.binding.ipobserver.internal.IpObserverHandler.pollStation(IpObserverHandler.java:236) ~[?:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[?:?]
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) ~[?:?]
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
	at java.lang.Thread.run(Thread.java:829) [?:?]

i really don’t know if the script provided by @Atsz does this, but i think i could post the script here, @Atsz ?
I could try the wundergroundupdatereceiver binding but i can only find 3 of these 4 bindings (oh3.2.0.M1):

found this one (binding-ipobserver) in openhab > bindings

this is probably “binding-weatherunderground” in openhab / bindings?

binding-ambientweather in openhab / bindings

can’t find this in openhab / bindings…