OC3 Daten an wunderground

Kabellose und kabelgebundene Sender und Empfänger der klassischen Homematic-Serie

Moderator: Co-Administratoren

Tibin
Beiträge: 507
Registriert: 26.10.2016, 16:08
System: CCU
Hat sich bedankt: 19 Mal
Danksagung erhalten: 15 Mal

Re: OC3 Daten an wunderground

Beitrag von Tibin » 04.12.2016, 15:53

Hallo AudioSonic,
also ich habe jetzt ein bisschen getestet und ich weiß gar nicht wie ich das mit meiner Unkenntnis erklären soll :roll:
Der Reihe nach...
Durch dein Script (mit WriteLine) konnte man ja sehen ab wann es hakt.
Die Systemvariable "Regen heute" ist zwar zu sehen und wird auch selbst vom OC3 beim anlernen erzeugt, aber da meine OC3 ja ziemlich neu ist, muss EQ3 da irgendwas im Hintergrund geändert haben.
Also habe ich mit XML-API -- sysvarlist.cgi die Variablen kontrolliert und dort gibt es nur eine neue die dem "Regen heute" sehr nahe kommt, die "${sysVarRainToday}".
So habe ich es dann auch im Script eingetragen und es funktioniert alles. Erst mit deinem WriteLine - Script getestet. Läuft durch. Und dann im Original- Script eingetragen und nach schon 2x senden war meine OC3 bei WU zu sehen :D
Hier dann noch mal das Script..

Code: Alles auswählen

!Wetterdaten des OC3 an Wunderground senden - by AudioSonic

!Daten der PWS (Personal Weather Station) eingeben, zuvor PWS Anlegen unter www.wunderground.com -> more -> register your PWS
!eigene Daten hier eingeben
string ID = "ABCDEFG5"; !eigene Wunderground Station ID eingeben
string PW = "12345ABC"; !eigenen Wunderground Station Key eingeben
string OC3 = "LEQ1234567"; !eigene Seriennr. des OC3 eintragen  

!zu übermittelnde Werte aus OC3 
!ab hier muss nichts mehr geändert werden.
real tempc = dom.GetObject("BidCos-RF."#OC3#":1.TEMPERATURE").Value(); !Messwert vom OC3 in Grad Celsius 
integer humidity = dom.GetObject("BidCos-RF."#OC3#":1.HUMIDITY").Value(); !Messwert vom OC3 in %
real windspeedkmh = dom.GetObject("BidCos-RF."#OC3#":1.WIND_SPEED").Value(); !Messwert vom OC3 in km/h  
integer winddir = dom.GetObject("BidCos-RF."#OC3#":1.WIND_DIRECTION").Value(); !Messwert vom OC3
real dailyrainmm = dom.GetObject("${sysVarRainToday}").Value(); !Messwert vom OC3 in mm, die Regenmenge muss in der Systemvariablen "????????????????Regen heute?????????" (exakte Schreibweise der Systemvariablen beachten) vorliegen)

!Umrechnung der Werte, da Wunderground nur "Englische-Einheiten" akzeptiert, z.B. von Grad Celsius in Grad Fahrenheit
real tempf = (1.8 * tempc) + 32.0;
real windspeedmph = 0.621371192 * windspeedkmh;
real dailyrainin = 0.03937 * dailyrainmm;

!Wetterdaten an Wunderground übermitteln
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -k 'http://weatherstation.wunderground.com/weatherstation/updateweatherstation.php?ID="#ID#"&PASSWORD="#PW#"&dateutc=now&tempf="#tempf#"&humidity="#humidity#"&windspeedmph="#windspeedmph#"&winddir="#winddir#"&dailyrainin="#dailyrainin#"&action=updateraw'");
Einen schönen 2.Advent noch,
Gruß Tino.

Tibin
Beiträge: 507
Registriert: 26.10.2016, 16:08
System: CCU
Hat sich bedankt: 19 Mal
Danksagung erhalten: 15 Mal

Re: OC3 Daten an wunderground

Beitrag von Tibin » 04.12.2016, 17:01

Sorry eine Frage noch,
ich weiß jetzt nicht wie man es testen kann ob https funktioniert, aber mit deinem WriteLine-Script läuft es bis zum Ende durch (mit https).
Gruß Tino

Tibin
Beiträge: 507
Registriert: 26.10.2016, 16:08
System: CCU
Hat sich bedankt: 19 Mal
Danksagung erhalten: 15 Mal

Re: OC3 Daten an wunderground

Beitrag von Tibin » 04.12.2016, 17:21

Oh man, ich verzweifele hier gleich..
Das Programm speichert die Schreibweise "${sysVarRainToday}" so nicht ab. Wenn ich das Script nach dem speichern im Programm wieder öffne, steht da wieder "Regen heute" und das funzt so nicht.
Man man man.... mal sehen ob du eine Lösung weißt. Ich dachte schon ich habe es hinbekommen :roll:
Hauptsache du siehst noch durch bei meinen ganzen Beiträgen :mrgreen: .
Tino

Benutzeravatar
AudioSonic
Beiträge: 236
Registriert: 31.08.2014, 20:15

Re: OC3 Daten an wunderground

Beitrag von AudioSonic » 04.12.2016, 18:56

Hmm, hast du sonst noch irgend ein Objekt was "Regen heute" heisst, keine Ahnung, evtl. ein Progamm, Favorit, Gerät, usw... Weil dann wäre es evtl. ein Fall für BadenPowers sicherer Zugriffsmethode für Systemvariablen. Für den Anfang lasse mal das Skript auf http bis es fehlerfrei läuft (um mal generell eine mögliche Fehlerquelle auszuschließen.

Benutzeravatar
AudioSonic
Beiträge: 236
Registriert: 31.08.2014, 20:15

Re: OC3 Daten an wunderground

Beitrag von AudioSonic » 04.12.2016, 19:07

Ersetze mal die entsprechende Zeile mit der besagten SV durch das hier:

real dailyrainmm = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Regen heute").Value();

Tibin
Beiträge: 507
Registriert: 26.10.2016, 16:08
System: CCU
Hat sich bedankt: 19 Mal
Danksagung erhalten: 15 Mal

Re: OC3 Daten an wunderground

Beitrag von Tibin » 04.12.2016, 22:59

AudioSonic hat geschrieben:Ersetze mal die entsprechende Zeile mit der besagten SV durch das hier:

real dailyrainmm = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Regen heute").Value();
Habe ich mit deinem WriteLine Script getestet, bricht vor dieser Zeile ab :cry:
AudioSonic hat geschrieben:Hmm, hast du sonst noch irgend ein Objekt was "Regen heute" heisst, keine Ahnung, evtl. ein Progamm, Favorit, Gerät, usw... Weil dann wäre es evtl. ein Fall für BadenPowers sicherer Zugriffsmethode für Systemvariablen.
Nein habe ich nicht. Nur eine SV die "WD_Regen Heute" heißt.
AudioSonic hat geschrieben:Für den Anfang lasse mal das Skript auf http bis es fehlerfrei läuft (um mal generell eine mögliche Fehlerquelle auszuschließen.
Hatte es bisher immer auf http.
Nur noch mal zur Kontrolle: Als ich den OC3 angelernt habe, wurden automatisch 2 Systemvariablen und 2 Programme angelegt.
1.SV: "Regen heute" als Zahl von 0 bis 1000mm mit Kanal Wetter-Kombisensor
2.SV: "Regen gestern" als Zahl von 0 bis 1000mm mit Kanal Wetter-Kombisensor
1.Programm: "Regentagesmenge aktualisieren" mit dem Script

Code: Alles auswählen

var rainToday = dom.GetObject(46602);
var rainYesterday = dom.GetObject(46603);
var rainCounter = dom.GetObject(46596);

          if ( (rainToday) && (rainYesterday) && (rainCounter) )
          {
            if (rainCounter.LastTimestamp())
            {
              var diff = rainCounter.Value() - rainCounter.LastValue();
              if ( diff < 0.0)
              {
                diff = diff + rainCounter.ValueMax();
              }
              rainToday.State(rainToday.State() + diff);
            }
            else
            {
              rainToday.State(0.0);
              rainYesterday.State(0.0);
            }
          }
2.Programm: "Regentagesmenge zuruecksetzen" mit dem Script

Code: Alles auswählen

var rainToday = dom.GetObject(46602);
var rainYesterday = dom.GetObject(46603);

          if ( (rainToday) && (rainYesterday) )
          {
            rainYesterday.State(rainToday.Value());
            rainToday.State(0.0);
          }
wobei das 2. Programm, da habe ich den Name geändert. Da stand zuruecksetzen für das ue irgendwas anderes. Keine Ahnung ob das relevant ist.
Tino

Tibin
Beiträge: 507
Registriert: 26.10.2016, 16:08
System: CCU
Hat sich bedankt: 19 Mal
Danksagung erhalten: 15 Mal

Re: OC3 Daten an wunderground

Beitrag von Tibin » 05.12.2016, 00:03

So zum Schluss für heute nur noch meine Beobachtungen, die ich nicht verstehe :shock:
Seitdem ich im Programm im Script das mit "${sysVarRainToday}" abgespeichert habe, kommen die Daten alle 30min bei WU an, obwohl dort wenn ich den Text aufrufe "Regen heute" steht.
Teste ich mit deinem WriteLine Script mit "${sysVarRainToday}" läuft es bis zum Ende durch und die Daten kommen auch zu dem Zeitpunkt korrekt bei WU an.
Teste ich nun mit "Regen heute" läuft es wieder nur bis windir und es kommt im syslog wieder die Fehlerzeile und bei WU kommt auch nix an.
Hoffe ich konnte mich verständlich ausdrücken :wink: .
Das ist mir zu hoch :roll:
Tino

Benutzeravatar
AudioSonic
Beiträge: 236
Registriert: 31.08.2014, 20:15

Re: OC3 Daten an wunderground

Beitrag von AudioSonic » 05.12.2016, 00:16

Zu hoch? Mir langsam auch ... :D irgenwie Strange das ganze

Ersetze mal die entsprechende Zeile mit der besagten SV durch das hier:

real dailyrainmm = dom.GetObject(46602).Value();

Die beiden Skripte greifen auch auf die SV mit der ID zu....

Oder so lassen wie es bei dir funktioniert hat

BadenPower

Re: OC3 Daten an wunderground

Beitrag von BadenPower » 05.12.2016, 09:33

AudioSonic hat geschrieben:Zu hoch? Mir langsam auch ... :D irgenwie Strange das ganze
Wieso zu hoch? Es ist doch ganz einfach.

Die Systemvariable für die heutige Regenmenge hat die ID "46602" und heißt heißt nicht "Regen heute" sondern "${sysVarRainToday}". Angezeigt wird in der WebUI natürlich "Regen heute", wenn die Benutzersprache auf deutsch eingestellt ist, da die WebUI alle Platzhalternamen übersetzt. Stellst Du auf englisch, dann zeigt die WebUI "Rain today" an.

Darum verwenden die internen Programme auch die ID der Systemvariable und nicht den Namen, da der Name der SV auch durch den Benutzer geändert werden kann.

Du kannst einfach einmal testen wie die Variable heißt:

Code: Alles auswählen

object lObj = dom.GetObject(46602);
if(lObj)
{
  WriteLine("Das Objekt trägt den Namen: '" # lObj.Name() # "'");
}
else
{
  WriteLine("Kein Objekt mit dieser ID vorhanden.");
}
Damit der Name auch dem entspricht, welcher angezeigt wird, kann man die Systemvariable von dem in der WebUI angezeigten Namen in "Regen heute1" und dann zurück in "Regen heute" umbenennen. Dann heißt die Systemvariable auch tatsächlich "Regen heute".

.

Tibin
Beiträge: 507
Registriert: 26.10.2016, 16:08
System: CCU
Hat sich bedankt: 19 Mal
Danksagung erhalten: 15 Mal

Re: OC3 Daten an wunderground

Beitrag von Tibin » 05.12.2016, 14:59

AudioSonic hat geschrieben:Ersetze mal die entsprechende Zeile mit der besagten SV durch das hier: real dailyrainmm = dom.GetObject(46602).Value();Die beiden Skripte greifen auch auf die SV mit der ID zu....
Habe ich so gemacht, und es funktioniert!! Dein Script läuft durch und die Daten kommen auch fehlerfrei bei WU an. Und vor allem: Das Script wird im Programm auch so gespeichert :!: :)
BadenPower hat geschrieben:Du kannst einfach einmal testen wie die Variable heißt:
Antwort deines Scriptes: Das Objekt trägt den Namen: '${sysVarRainToday}'
Ich bin echt begeistert. Daumen hoch!
Ich verstehe nur nicht, dass ich der erste bin, der dieses Script benutzt und mit dem "Regen heute" Probleme hatte. AudioSonic hat ja gesagt dass er selber gar keine OC3 hat, also gar nicht testen konnte.
BadenPower hat geschrieben:Damit der Name auch dem entspricht, welcher angezeigt wird, kann man die Systemvariable von dem in der WebUI angezeigten Namen in "Regen heute1" und dann zurück in "Regen heute" umbenennen. Dann heißt die Systemvariable auch tatsächlich "Regen heute".
Und das hat bestimmt auch keiner gemacht, der sich damit nicht auskennt. :mrgreen:
So dann noch ein großes DANKESCHÖN AudioSonic für deine Hilfestellung und Geduld.
Und auch dir BadenPower für die super nachvollziehbare Erläuterung.
Toll wie einem hier geholfen wird :!: :!: :!:
Tino

Antworten

Zurück zu „HomeMatic Aktoren und Sensoren (klassisch)“