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

Thanks Matt1. I did check bundle:list, but haven’t tried debug karaf; will give that a shot.

Fixed! All I did was change log level to debug and restart OpenHAB; it then accepted the ambientweather addon! I’ve changed logging back to INFO and everything appears to be working fine.

Thanks for the help!

I know this is from over 6 months ago but could you provide your changes on github? Fork the Hentschel addons repo, apply your changes, commit/push, and maybe even submit a pull request to incorporate your stuff into master. This doesn’t require captndelta to reply to you here.

You made some good changes. I really appreciate them but since they’re not under source control we can’t build on what you did.

1 Like

Yes as Thomas released it with EPL1 license marked on the repository I believe that is not an issue, however out of respect for Thomas I did not wish to create a new repository but to have the changes added to his project. Now Thomas has not been around or answered in >12 months (June 2018 was last contact) I feel at some point we need to do something to keep his hard work (Thank you) creating the binding useful for the community. I just don’t know what the correct way to go about it is.

I don’t believe we can submit this to the official Openhab project as the person who does that needs to sign off that the majority of the work is theirs and not the work of other people. I can not do that and this is the reason why I will not be spending any time doing coding on this until this situation is sorted out.

I have it sitting in a private GitHub repository currently so it is backed up and could be made public with the tick of a box. The jar you can download is also already converted to the bnd build system so will work on future Openhab releases. If you are wanting to develop it further then I am happy to send you a zip file but we need to think about making it easy for multiple people to contribute to and also have the goal of getting it into the Openhab project.

What do you see as the correct way to move forward is?

I went to latest build and get : -(
:19:09.177 [ERROR] [.core.karaf.internal.FeatureInstaller] - Failed installing 'openhab-binding-ambientweather': Unable to resolve root: missing requirement [root] osgi.identity; osgi.identity=openhab-misc-openhabcloud; type=karaf.feature; version="[2.5.0.SNAPSHOT,2.5.0.SNAPSHOT]"; filter:="(&(osgi.identity=openhab-misc-openhabcloud)(type=karaf.feature)(version>=2.5.0.SNAPSHOT)(version<=2.5.0.SNAPSHOT))" [caused by: Unable to resolve openhab-misc-openhabcloud/2.5.0.SNAPSHOT: missing requirement [openhab-misc-openhabcloud/2.5.0.SNAPSHOT] osgi.identity; osgi.identity=org.openhab.io.openhabcloud; type=osgi.bundle; version="[2.5.0.201908140429,2.5.0.201908140429]"; resolution:=mandatory [caused by: Unable to resolve org.openhab.io.openhabcloud/2.5.0.201908140429: missing requirement [org.openhab.io.openhabcloud/2.5.0.201908140429] osgi.wiring.package; filter:="(&(osgi.wiring.package=io.socket.client)(version>=1.0.0)(!(version>=2.0.0)))"]]

@shorty707

This thread is about a binding that is not part of the official distro. It looks like the issue you’re reporting involves the binding that’s part of the disto. Correct? If so, you should report in this thread.

Thanks for pointing this out. I did not see that there are 2 bindings.
I understand yours needs an ambient weather API which unfortunately stops me for going your way.
In Europe there are actually only rebranded versions of the observerIP unit which are recognized by their deviceID from AW and not allowed to use their cloud services.

Well this is the nature of open source that somebody can fork and continue.
IMHO we should not hope and wait but just push your version now to an offical openhab binding.
you can give some credits to him in the wiki :slight_smile:

btw. do you have a link to download the JAR with your modifications?

You can download the jar precompiled for you here.
http://www.pcmus.com/openhab/WeatherStationBinding/

Source code is here should you wish to make changes/fork…

Only issue I know of is if my router/switch reboots I get multiple different errors in the logs until it starts back up again. Comes back fine when switch is working again so have not bothered to fix, but if someone is making changes this would be great to fix :slight_smile:

I am missing the “daily gust” as possible channel here :-/

in my RegEx I had 3 different “winds”

Number LOCALWEATHER_avgwind "Windgeschwindigkeit  [%s km/h]" <temperature> { http="<[WeatherObserverCache:5001:REGEX(.*?avgwind.*?value=\"([0-9]*.[0-9]*)\".*)]" }
Number LOCALWEATHER_gustspeed "Windböe  [%s km/h]" <temperature> { http="<[WeatherObserverCache:5001:REGEX(.*?gustspeed.*?value=\"([0-9]*.[0-9]*)\".*)]" }
Number LOCALWEATHER_dailygust "Stärkste Windböe Heute [%s km/h]" <temperature> { http="<[WeatherObserverCache:5001:REGEX(.*?dailygust.*?value=\"([0-9]*.[0-9]*)\".*)]" }

like on the devices page:

I can confirm that mine does NOT have the max daily gust. What brand is yours and what version is shown at this link? Mine is 2.2.5

http://192.168.xx.xx/livedata.htm

It is very easy to add it if you show a small section of the file returned from that link. Use inspect source or save and open the file in a text editor. I’m too busy to add it but you can compare what I changed to add the Last updated time channel. Need to edit 3 files and compile.

HI @matt1
I currently have 4.4.7
Mine was labeled Renkforce… however you can actually always flash the official firmware to any brand. https://ambientweather.net/help/observerip-firmware-update/

Just “Ambientweather Cloud Services” do not work as they recognize and block OEM labeled devices. (I asked them.)

<!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>LiveData</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 ><img src="img/1.jpg" width="74" height="80" ></td>
							<td width="10">&nbsp;</td>
                           	<td class="txtstyle_1" >AmbientWeather 4.4.7</td>                                   
                        </tr>
                </table></td>
            </tr>
            <tr> 
                <td colspan="2" align="right" bgcolor="#60B7FF">&nbsp;</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="#C0C0C0"><div class="menuitem_1"><a href="station.htm">Station Settings</a></div></td>
                            <td bgcolor="#EDEFEF"><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="livedata" method="POST" onsubmit="return chkForm(0);">  
                <tr>
                    <td colspan="2" bgcolor="#EDEFEF">&nbsp;</td>
                </tr> 
                <tr>
                    <td colspan="2" bgcolor="#EDEFEF"><div class="subitem_1">Live Data</div></td>
                </tr>   
                 <tr>
                    <td width="448" bgcolor="#EDEFEF"><div class="item_1">Receiver Time:</div></td>
                    <td width="352" bgcolor="#EDEFEF">                    
                    <input name="CurrTime" disabled="disabled" type="text" class="item_2" style="WIDTH: 120px" value="22:36 8/25/2019" maxlength="16"/></td>
                </tr>

                <tr>
                    <td width="448" bgcolor="#EDEFEF"><div class="item_1">Indoor Sensor ID and  Battery </div></td>
                    <td width="352" bgcolor="#EDEFEF">
                    <input name="IndoorID" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="0x9b" maxlength="5" />
                    <input name="inBattSta" disabled="disabled" type="text" class="item_2" style="WIDTH: 100px" value="LOW STATUS" maxlength="12" />
                    </td>
                </tr>                
                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">Outdoor Sensor ID and Battery</div></td>
                    <td bgcolor="#EDEFEF">                    
                        <input name="Outdoor1ID" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="0x52" maxlength="5" />
                        <input name="outBattSta1" disabled="disabled" type="text" class="item_2" style="WIDTH: 100px" value="Normal" maxlength="12" />
                    </td>
                </tr>                
                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">Outdoor2 Sensor ID and Battery</div></td>
                    <td bgcolor="#EDEFEF">                    
                        <input name="Outdoor2ID" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="0x--" maxlength="5" />
                        <input name="outBattSta2" disabled="disabled" type="text" class="item_2" style="WIDTH: 100px" value="- -" maxlength="12" />
                    </td>
                </tr>             

                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">Indoor Temperature</div></td>
                    <td bgcolor="#EDEFEF"><input name="inTemp" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="25.3" maxlength="5" /></td>
                </tr>

                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">Indoor Humidity</div></td>
                    <td bgcolor="#EDEFEF"><input name="inHumi" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="59" maxlength="3" /></td>
                </tr>
                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">Absolute Pressure </div></td>
                    <td bgcolor="#EDEFEF"><input name="AbsPress" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="969.60" maxlength="6" /></td>
                </tr>	
                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">Relative Pressure </div></td>
                    <td bgcolor="#EDEFEF"><input name="RelPress" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="1018.40" maxlength="6" /></td>
                </tr>	
                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">Outdoor Temperature</div></td>
                    <td bgcolor="#EDEFEF"><input name="outTemp" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="20.8" maxlength="5" /></td>
                </tr>

                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">Outdoor Humidity </div></td>
                    <td bgcolor="#EDEFEF"><input name="outHumi" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="86" maxlength="3" /></td>
                </tr>

                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">Wind Direction </div></td>
                    <td bgcolor="#EDEFEF"><input name="windir" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="134" maxlength="5" /></td>
                </tr>

                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">Wind Speed </div></td>
                    <td bgcolor="#EDEFEF"><input name="avgwind" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="0.0" maxlength="5" /></td>
                </tr>

                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">Wind Gust </div></td>
                    <td bgcolor="#EDEFEF"><input name="gustspeed" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="0.0" maxlength="5" /></td>
                </tr> 
  				
                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">Max Daily Gust </div></td>
                    <td bgcolor="#EDEFEF"><input name="dailygust" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="12.2" maxlength="5" /></td>
                </tr> 
                                        
                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">Solar Radiation </div></td>
                    <td bgcolor="#EDEFEF"><input name="solarrad" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="0.00" maxlength="12" /></td>
                </tr>
                
                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">UV </div></td>
                    <td bgcolor="#EDEFEF"><input name="uv" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="1" maxlength="12"></td>
                </tr>
                
                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">UVI </div></td>
                    <td bgcolor="#EDEFEF"><input name="uvi" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="0" maxlength="3"></td>
                </tr>

                <tr>
                    <td bgcolor="#EDEFEF"><div class="item_1">Hourly Rain Rate</div></td>
                    <td bgcolor="#EDEFEF"><input name="rainofhourly" disabled="disabled" type="text" class="item_2" style="WIDTH: 80px" value="0.00" maxlength="8" /></td>
                </tr>
                
				<form name="Rain_1" method="POST" onsubmit="return chkForm(0);">  

	               <tr>
	                    <td bgcolor="#EDEFEF"><div class="item_1">Daily Rain</div></td>
	                    <td bgcolor="#EDEFEF"><input name="rainofdaily"  type="text" class="item_2" style="WIDTH: 80px" value="0.00" maxlength="8" />
                    <span id="rainofdaily_msg" class="errMsg0"></span></td>
	                </tr>

	                <tr>
	                    <td bgcolor="#EDEFEF"><div class="item_1">Weekly Rain</div></td>
	                    <td bgcolor="#EDEFEF"><input name="rainofweekly"  type="text" class="item_2" style="WIDTH: 80px" value="0.00" maxlength="8" />
                        <span id="rainofweekly_msg" class="errMsg0"></span></td>
	                </tr>

	                <tr>
	                    <td bgcolor="#EDEFEF"><div class="item_1">Monthly Rain</div></td>
	                    <td bgcolor="#EDEFEF"><input name="rainofmonthly"  type="text" class="item_2" style="WIDTH: 80px" value="69.90" maxlength="8" />
                        <span id="rainofmonthly_msg" class="errMsg0"></span></td>
	                </tr>

	                <tr>
	                    <td bgcolor="#EDEFEF"><div class="item_1">Yearly Rain</div></td>
	                    <td bgcolor="#EDEFEF"><input name="rainofyearly"  type="text" class="item_2" style="WIDTH: 80px" value="589.80" maxlength="8" />
                        <span id="rainofyearly_msg" class="errMsg0"></span></td>
	                </tr>
              
	                <tr>
	                    <td colspan="2" bgcolor="#EDEFEF">&nbsp;</td>
	                </tr>
	                <tr align="center">
	                    <td colspan="2" 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" align="center" bgcolor="#EDEFEF">
                     	<input name="rain_Default" type="button" class="item_2" style="WIDTH: 110px; HEIGHT: 24px;"  onclick="raindef()" value="Rain Reset">
                        <input  id="refresh_st" type="button" class="item_4" style="WIDTH: 110px; HEIGHT: 24px;"  onclick="uiCtrl(this.value);" value="Refresh" />
                        <input  id="refresh_sp" type="button" class="item_2" style="WIDTH: 110px; HEIGHT: 24px;"  onclick="uiCtrl(this.value);" value="Stop Refresh"  />
                    </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>
        <script language="JavaScript" type="text/javascript">
            <!--
            var rfTaskRuningFlag = 0, rfTimeId;
            uiCtrl('Refresh');

			function uiCtrl(uiCmd)
			{
			    if (uiCmd=='Refresh'){
			        document.getElementById('refresh_st').disabled = true;
			        document.getElementById('refresh_sp').disabled = false;
			        rfTaskRuningFlag = 1;
			        rfTaskState = 0;
			        rfTimeId = setInterval("ss()", 16000);					
			    }else if (uiCmd=='Stop Refresh'){
			        document.getElementById('refresh_st').disabled = false;
			        document.getElementById('refresh_sp').disabled = true;
			        rfTaskRuningFlag = 0;
			        clearInterval(rfTimeId);
			    }
			}

			function ss()
			{
			    if (rfTaskRuningFlag)
			    {			
				   window.location.reload();
			    }
			}
			-->
		</script>
    </body>
</html>

Hi,

I was using wh2600 weatherstation from Froggit with the ambientweather1400ip binding 2.2.2. It was working allright, but some of the items were not received (like wind direction, precipitation, etc.)

I downloaded ambientweather1400ip-2019-05-25 versionn of the binding, but receive an error: “Unable to reach ‘192.168.xx.xxx’, please check that the ‘hostname/ip’ setting is correct, or if there is a network problem. Detailed error: ‘null’”

Ping from openhab server works, observerIP is running and refreshing on that address, and it all worked with earlier version of binding. What do I miss? Please help,

Regards,

Rimantas

Hi all, i am having an issue with this binding. It works for a while but then the data will go stale and freeze. Disabling the add on in Paper UI and re-enabling it make it work again but only for a couple of hours.

I am running 2.5.0 snapshot on a new raspberry pi and am wondering if this is the issue.

Thanks

Had the same issue with the freeze. I was unable to solve it with the binding. Then changed to get the data via REGEX which runs now very stable.
If you plan this, too, here is my config:
http.cfg

wheatherstationCache.url=http://10.XXX.XXX.XXX/livedata.html
wheatherstationCache.updateInterval=40000

and the item file:

Number WeatherWindSpeed2 	"Wind aktuell [%.0f km/h]"  {http="<[wheatherstationCache:30000:REGEX(.*?windspeed.*?value=\"(.*?)\".*)]"}
Number RelPress 	"Relativer Luftdruck [%.2f hPa]"  {http="<[wheatherstationCache:30000:REGEX(.*?RelPress.*?value=\"(.*?)\".*)]"}
Number AbsPress 	"Absoluter Luftdruck [%.2f hPa]"  {http="<[wheatherstationCache:30000:REGEX(.*?AbsPress.*?value=\"(.*?)\".*)]"}
Number WeatherIndoorTemp2 	"Temp.Dach [%.1f °C]" (gTemperatures) {http="<[wheatherstationCache:30000:REGEX(.*?inTemp.*?value=\"(.*?)\".*)]"}
Number WeatherOutdoorTemp2 	"Außen Temperatur [%.1f °C]"  {http="<[wheatherstationCache:30000:REGEX(.*?outTemp.*?value=\"(.*?)\".*)]"}
Number WeatherIndoorHumidity2 	"FeuchteDach [%.0f]" (gHumidity) {http="<[wheatherstationCache:30000:REGEX(.*?inHumi.*?value=\"(.*?)\".*)]"}
Number WeatherOutdoorHumidity2 	"FeuchtAußen [%.0f]" (gHumidity) {http="<[wheatherstationCache:30000:REGEX(.*?outHumi.*?value=\"(.*?)\".*)]"}
Number WeatherWindDir2 "Wind Richtung [%.0f °]" {http="<[wheatherstationCache:30000:REGEX(.*?windir.*?value=\"(.*?)\".*)]"}
Number WeatherWindGust2 "Wind Böe [%.0f km/h]" {http="<[wheatherstationCache:30000:REGEX(.*?gustspeed.*?value=\"(.*?)\".*)]"}
Number WeatherSolarRad2 "Sonnenstrahlung [%.0f W/m²]" {http="<[wheatherstationCache:30000:REGEX(.*?solarrad.*?value=\"(.*?)\".*)]"}
Number WeatherUV2 "UV Strahlungsintensität [%.0f W/m²µm]" {http="<[wheatherstationCache:30000:REGEX(.*?uv.*?value=\"(.*?)\".*)]"}
Number WeatherUVIndex2 "UV Index" {http="<[wheatherstationCache:30000:REGEX(.*?uvi.*?value=\"(.*?)\".*)]"}
Number WeatherRainHourly2 "Regen letzte Stunde [%.1f mm]" {http="<[wheatherstationCache:30000:REGEX(.*?rainofhourly.*?value=\"(.*?)\".*)]"}
Number WeatherRainDaily2 "Regen letzte 24h [%.1f mm]" {http="<[wheatherstationCache:120000:REGEX(.*?rainofdaily.*?value=\"(.*?)\".*)]"}
Number WeatherRainWeekly2 "Regen diese Woche [%.1f mm]" {http="<[wheatherstationCache:120000:REGEX(.*?rainofweekly.*?value=\"(.*?)\".*)]"}
Number WeatherRainMonthly2 "Regen diesen Monat [%.1f mm]" {http="<[wheatherstationCache:120000:REGEX(.*?rainofmonthly.*?value=\"(.*?)\".*)]"}
Number WeatherRainYearly2 "Regen dieses Jahr [%.1f mm]" {http="<[wheatherstationCache:120000:REGEX(.*?rainofyearly.*?value=\"(.*?)\".*)]"}
2 Likes

Thanks @maxico, looks cool and easy. I will give it a try, thanks for config.

This morning I managed to make biding work. It seems the problem was that I did not delete a ambientweather1400ip thing from PaperUI, which worked with the previous version of the binding.

When I properly deleted a thing (I did not succeed in PaperUI, so had to manually delete from jsonDB file) and the added binding and configured .thing file, it started to work. It does not read wind speed though, publishing an error that it does not find a channel for wind speed.

Is there a guide to set this up @maxico? Does the binding still need to be installed?

So far i have installed the HTTP addon, added my details to http.cfg and added the channels to the items file. I have also added the item to the sitemap. all seems to be working so far!
Thanks

Thanks again for the configuration, @maxico. It runs flawlessly!

I just purchased a rebranded version of these wx stations (Purchased in Australia), the Pantech WH2900 as well as some Ecowitt stuff to play with, GW1000 Wifi gateway, WH68, WH40.

In theory I thought the WH2900 would have worked with this binding as its just a rebranded version of the 2902, but I dont get any respose from the /livedata.htm
And the GW1000 I was hoping to similar to the IPObserver, but no luck there either.

Does anyone here have, or have plans to grab a GW1000 Wifi gateway? They seem to be the new must have, and apparently have an api for local usage.

Hi, can you actually access IPobserver on you address x.x.x.x/livedata.htm?