OC3 Kombisensor Regenmenge

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

Moderator: Co-Administratoren

Benutzeravatar
Sammy
Beiträge: 9172
Registriert: 09.09.2008, 20:47
Hat sich bedankt: 15 Mal
Danksagung erhalten: 174 Mal

Re: OC3 Kombisensor Regenmenge

Beitrag von Sammy » 09.12.2016, 10:28

Entweder bis morgen warten, oder Programm deaktivieren und dann wieder aktivieren.
Links: CCU-Logik, Tipps für Anfänger, WebUI-Doku, Expertenparameter, virtuelle Aktorkanäle
Inventur vom 22.01.14: 516 Kanäle in 165 Geräten, 132 Programme, 270 Direkte Verknüpfungen
Ich übernehme für alle von mir gegebenen Hinweise, Tipps und Links keine Haftung! Das Befolgen meiner Tipps ist nur für Fachkundige gedacht und erfolgt auf eigene Gefahr!

Ollo0815
Beiträge: 13
Registriert: 06.01.2017, 13:23
Hat sich bedankt: 4 Mal

Re: OC3 Kombisensor Regenmenge

Beitrag von Ollo0815 » 24.01.2017, 15:50

Moin!

Ich habe von das Script ebenso eingebunden wie die Variablen.
Funktioniert auch alles soweit, vielen Dank dafür!

Gibt es die Möglichkeit, diese neuen Variablen ebenso auszuwerten wie die Datenpunkte von den Aktoren? Es wäre fein, sowas auch in CUxD-Highcharts angezeigt zu bekommen.
Hier interessiert mich insbesondere die gefilterte Helligkeit. Mit welchem Zusatz im Script kann man das verwirklichen? Ich stelle mir einen Datenpunkt bei jeder Änderung der jeweiligen Variable vor?

Jemand eine Idee?

Danke!

fini
Beiträge: 34
Registriert: 28.11.2016, 09:00

Re: OC3 Kombisensor Regenmenge

Beitrag von fini » 10.05.2017, 06:32

Moin,

musste das Wetterscript ändern und jetzt geht es nicht mehr.
Geändert habe ich Gross in Kleinschreibung und Lehrzeichen durch Unterstrich ersetzt bei den Systemvariable.

Jetzt ändern sich die Werte nicht mehr.

Hier das Script

Code: Alles auswählen

string wds_name=dom.GetObject("$src$").Name();
    object prg=dom.GetObject($this$);
    object dp_tmp=dom.GetObject(prg.Rule().RuleCondition(1).CndSingleCondition(0).LeftVal());
    object dp_wds_channel=dom.GetObject(dp_tmp.Channel());
    object dp_temp_max_today=dom.GetObject('temp_max_heute');
    object dp_temp_min_today=dom.GetObject('temp_min_heute');
    object dp_hum_max_today=dom.GetObject('luftfeuchte_max_heute');
    object dp_hum_min_today=dom.GetObject('luftfeuchte_min_heute');
    object dp_wind_max_today=dom.GetObject('wind_max_heute');
    object dp_rain_today=dom.GetObject('regen_heute');
    object dp_sun_today_temp=dom.GetObject('sonnenminuten_heute');
    object dp_sun_today=dom.GetObject('sonnenstunden_heute');
    object dp_bright_avg=dom.GetObject('Helligkeit gefiltert');
    var pos1=wds_name.Find("TEMPERATURE");
    real temp=dp_wds_channel.DPByHssDP("TEMPERATURE").Value();
    real wind=dp_wds_channel.DPByHssDP("WIND_SPEED").Value();
    real bright=dp_wds_channel.DPByHssDP("BRIGHTNESS").Value();
    integer humidity=dp_wds_channel.DPByHssDP("HUMIDITY").Value();
    if(pos1!=-1)
    {
      var diff=dp_wds_channel.DPByHssDP("RAIN_COUNTER").Value()-dp_wds_channel.DPByHssDP("RAIN_COUNTER").LastValue();
      if((1.0*diff)<0.0)
      {
          diff=(1.0*diff)+dp_wds_channel.DPByHssDP("RAIN_COUNTER").ValueMax();
      }
      dp_rain_today.State(1.0*(dp_rain_today.Value())+diff);

      var diff=dp_wds_channel.DPByHssDP("SUNSHINEDURATION").Value()-dp_wds_channel.DPByHssDP("SUNSHINEDURATION").LastValue();
      if((1.0*diff)<0.0)
      {
         diff=(1.0*diff)+dp_wds_channel.DPByHssDP("SUNSHINEDURATION").ValueMax();
      }
      dp_sun_today_temp.State((60.0*(dp_sun_today_temp.Value())+diff)/60.0);
      dp_sun_today.State(dp_sun_today_temp.Value())/60;

      if(temp>dp_temp_max_today.Value())
      {
        dp_temp_max_today.State(temp);
      }
      if(temp<dp_temp_min_today.Value())
      {
        dp_temp_min_today.State(temp);
      }

      if(wind>dp_wind_max_today.Value())
      {
        dp_wind_max_today.State(wind);
      }

      dp_bright_avg.State(((7.0*dp_bright_avg.Value())+(1.0*bright))/8);

      if(humidity>dp_hum_max_today.Value())
      {
        dp_hum_max_today.State(humidity);
      }
      if(humidity<dp_hum_min_today.Value())
      {
        dp_hum_min_today.State(humidity);
      }
    }
    else
    {
      var x=dom.GetObject('temp_max_gestern').State(dp_temp_max_today.Value());
      x=dom.GetObject('temp_min_gestern').State(dp_temp_min_today.Value());
      x=dom.GetObject('luftfeuchte_max_gestern').State(dp_hum_max_today.Value());
      x=dom.GetObject('luftfeuchte_min_gestern').State(dp_hum_min_today.Value());
      x=dom.GetObject('wind_max gestern').State(dp_wind_max_today.Value());
      x=dom.GetObject('regen_gestern').State(dp_rain_today.Value());
      x=dom.GetObject('sonnenstunden_gestern').State(dp_sun_today.Value());

      dp_temp_max_today.State(temp);
      dp_temp_min_today.State(temp);
      dp_hum_max_today.State(humidity);   
      dp_hum_min_today.State(humidity);
      dp_wind_max_today.State(wind);
      dp_rain_today.State(0);
      dp_sun_today_temp.State(0);
    }
Bind jetzt schon über einen Tag am suchen nach den Fehler :-(
Vielleicht sieht einer von Euch was falsch ist.
Danke für Eure Hilfe!
Dateianhänge
wetter_09.17_7.02.jpg

fini
Beiträge: 34
Registriert: 28.11.2016, 09:00

Re: OC3 Kombisensor Regenmenge

Beitrag von fini » 11.05.2017, 17:48

kann keiner helfen?
also die werte heute max und min ändern sich wenn wert mehr oder weniger ist.
aber die daten von heute werden nicht auf gerstern übertragen.
finden den fehler einfach nicht :-(

Suedtschech
Beiträge: 23
Registriert: 30.07.2015, 20:07
System: CCU
Hat sich bedankt: 1 Mal

Re: OC3 Kombisensor Regenmenge

Beitrag von Suedtschech » 21.05.2017, 18:51

fini hat geschrieben:kann keiner helfen?
also die werte heute max und min ändern sich wenn wert mehr oder weniger ist.
aber die daten von heute werden nicht auf gerstern übertragen.
finden den fehler einfach nicht :-(
Versuch mal statt dem Unterstrich die Wörter zusammen zuschreiben. Z.b statt regen_heute schreibst du regenheute. Ich weiss zwar nicht warum aber ich glaub einen Versuch ist es wert.

Gesendet von meinem SM-G935F mit Tapatalk

RicoP
Beiträge: 4
Registriert: 11.01.2017, 16:12
Wohnort: Berlin

Re: OC3 Kombisensor Regenmenge

Beitrag von RicoP » 02.07.2017, 15:03

Hi,
bin nun auch ein stolzer Besitzer des OC3 in der 2.Version.
Will nun das Wetterskript nutzen und komme einfach nicht weiter.
Alle SysVar angelegt, Skript kopiert, Programm erstellt und nix :( .

Habe auf der Fehlersuche die Anleitungen von anli aus diesem Beitrag durchgearbeitet:
Hallo.

Kannst Du Dir bitte mal den erweiterten Script-Parser installieren und dann dort folgendes Skript ausführen:

Code: Alles auswählen
string dp_wds_channel = dom.GetObject("Außensensor:1");
object dp_temp_max_today=dom.GetObject('Heute Temp Max');
object dp_temp_min_today=dom.GetObject('Heute Temp Min');
object dp_hum_max_today=dom.GetObject('Heute Luftfeuchte Max');
object dp_hum_min_today=dom.GetObject('Heute Luftfeuchte Min');
object dp_wind_max_today=dom.GetObject('Heute Wind Max');
object dp_rain_today=dom.GetObject('Heute Regen');

real temp = dp_wds_channel.DPByHssDP("TEMPERATURE").Value();
real wind = dp_wds_channel.DPByHssDP("WIND_SPEED").Value();
real bright = dp_wds_channel.DPByHssDP("BRIGHTNESS").Value();
integer humidity = dp_wds_channel.DPByHssDP("HUMIDITY").Value();

dp_temp_min_today.State(temp);
dp_hum_min_today.State(humidity);

WriteLine("Temp: " # temp.ToString());
WriteLine("Wind: " # wind.ToString());
WriteLine("Bright: " # bright.ToString());
WriteLine("Feuchtigkeit: " # humidity.ToString());



Du müsstest eine Ausgabe (wenn Du auf STDOUT klickst) wie folgt erhalten:

Code: Alles auswählen
Temp: 7.000000
Wind: 17.600000
Bright: 111
Feuchtigkeit: 92
passt bei mir, es kommen die richtigen Werte.

Auch hier:
Hallo.

Na das ist doch ein Fortschritt ;-)

Bennene den ersten Kanal des Außensensors doch bitte noch einmal um auf "aussensensor:1". Dann probiere das ganze noch einmal mit folgendem Skript:

Code: Alles auswählen
string dp_wds_channel = dom.GetObject(5312);
WriteLine("'" # dp_wds_channel.Name() # "'");
WriteLine(dp_wds_channel.DPByHssDP("TEMPERATURE").Value());
string dp_wds_channelx = dom.GetObject("aussensensor:1");
WriteLine(dp_wds_channelx.DPByHssDP("TEMPERATURE").Value());



Das muss dann auch gehen. Wenn das dann geht, sind wir nah am Ziel ;-)
bekomme ich nach dem eintragen der eigenen ID und dem Kanalnamen die richtigen Werte. :? :roll:

Ich komm einfach nicht weiter. :evil:
Ich hoffe ihr könnt mir helfen. :D

Sobald ich das Skript durch den Parser jage bekomme ich diese Anzeige unter "JSON"
{
"prg": "null",
"sessionId": "",
"wds_name": "",
"httpUserAgent": "",
"STDOUT": ""
}
und "STDOUT" bleibt leer.

Hier das aktuell verwendete Script.

Code: Alles auswählen

string wds_name = dom.GetObject("$src$").Name();
        object prg=dom.GetObject($this$);
        object dp_tmp=dom.GetObject(prg.Rule().RuleCondition(1).CndSingleCondition(0).LeftVal());
        object dp_wds_channel=dom.GetObject(dp_tmp.Channel());
        object dp_temp_max_today=dom.GetObject('Heute Temp Max');
        object dp_temp_min_today=dom.GetObject('Heute Temp Min');
        object dp_hum_max_today=dom.GetObject('Heute Luftfeuchte Max');
        object dp_hum_min_today=dom.GetObject('Heute Luftfeuchte Min');
        object dp_wind_max_today=dom.GetObject('Heute Wind Max');
        object dp_rain_today=dom.GetObject('Heute Regen');
        object dp_bright_avg=dom.GetObject('Helligkeit gefiltert');
        var pos1 = wds_name.Find("TEMPERATURE");
        real temp = dp_wds_channel.DPByHssDP("TEMPERATURE").Value();
        real wind = dp_wds_channel.DPByHssDP("WIND_SPEED").Value();
        real bright = dp_wds_channel.DPByHssDP("BRIGHTNESS").Value();
        integer humidity = dp_wds_channel.DPByHssDP("HUMIDITY").Value();
        if(pos1 != -1)
        {
          var diff = dp_wds_channel.DPByHssDP("RAIN_COUNTER").Value()-dp_wds_channel.DPByHssDP("RAIN_COUNTER").LastValue();
          if ( (1.0*diff) < 0.0 )
          {
              diff = (1.0*diff) + dp_wds_channel.DPByHssDP("RAIN_COUNTER").ValueMax();
          }
          dp_rain_today.State(1.0*(dp_rain_today.Value()) + diff);

          if(temp > dp_temp_max_today.Value())
          {
            dp_temp_max_today.State(temp);
          }
          if(temp < dp_temp_min_today.Value())
          {
            dp_temp_min_today.State(temp);
          }

          if(wind > dp_wind_max_today.Value())
          {
            dp_wind_max_today.State(wind);
          }

          dp_bright_avg.State(((7.0*dp_bright_avg.Value())+(1.0*bright))/8);

          if(humidity > dp_hum_max_today.Value())
          {
            dp_hum_max_today.State(humidity);
          }
          if(humidity < dp_hum_min_today.Value())
          {
            dp_hum_min_today.State(humidity);
          }
        }
        else
        {
          var x = dom.GetObject('Gestern Temp Max').State(dp_temp_max_today.Value());
          x = dom.GetObject('Gestern Temp Min').State(dp_temp_min_today.Value());
          x = dom.GetObject('Gestern Luftfeuchte Max').State(dp_hum_max_today.Value());
          x = dom.GetObject('Gestern Luftfeuchte Min').State(dp_hum_min_today.Value());
          x = dom.GetObject('Gestern Wind Max').State(dp_wind_max_today.Value());
          x = dom.GetObject('Gestern Regen').State(dp_rain_today.Value());

          dp_temp_max_today.State(temp);
          dp_temp_min_today.State(temp);
          dp_hum_max_today.State(humidity);   
          dp_hum_min_today.State(humidity);
          dp_wind_max_today.State(wind);
          dp_rain_today.State(0);
        }
              object last_change = dom.GetObject("letzte Aktualisierung");
              time ts = dp_temp_max_today.Timestamp();
              var vts = last_change.State(ts.Format("%d.%m.%Y %T"));


Die angelegten SysVar.
Wetter01.JPG
SysVar 01/02
Wetter02.JPG
SysVar 02/02
Die ersten zwei sind die Originalen die der OC3 mitbringt.

Das Programm.
Wetter03.JPG
Programm 01/02
Wetter04.JPG
Programm 02/02
Wo wird den die ID oder der Sensorname/Kanalname eingetragen, oder holt es sich das Script selbst?
Wie Ihr merkt habe ich keine Ahnung von Skripten. :roll:

Besten Dank schon mal im Voraus.

Rico

Suedtschech
Beiträge: 23
Registriert: 30.07.2015, 20:07
System: CCU
Hat sich bedankt: 1 Mal

Re: OC3 Kombisensor Regenmenge

Beitrag von Suedtschech » 23.07.2017, 22:46

Hallo Rico
Du hast die Sys Variablen nicht dem Wettersensor zugeordnet. Vielleicht liegt es daran. Oder das Script startet mit 0:09 zu spät. Ich würd 0:00 Oder 0:01 verwenden.
MfG Südtschech

Gesendet von meinem SM-G935F mit Tapatalk

Alexxx2005
Beiträge: 252
Registriert: 17.12.2014, 18:56
Hat sich bedankt: 19 Mal
Danksagung erhalten: 3 Mal

Re: OC3 Kombisensor Regenmenge

Beitrag von Alexxx2005 » 07.10.2017, 23:17

Hallo Rico,

läuft es nun ?

Grüße Alex

CCUCCU
Beiträge: 128
Registriert: 24.02.2014, 17:51
Danksagung erhalten: 1 Mal

Re: OC3 Kombisensor Regenmenge

Beitrag von CCUCCU » 07.03.2018, 16:26

Bei mir ist "Sonnenstunden Gestern" immer identisch mit "Sonnenminuten Heute".
Weiß jemand woran das liegen könnte?

Code: Alles auswählen

string wds_name=dom.GetObject("$src$").Name();
    object prg=dom.GetObject($this$);
    object dp_tmp=dom.GetObject(prg.Rule().RuleCondition(1).CndSingleCondition(0).LeftVal());
    object dp_wds_channel=dom.GetObject(dp_tmp.Channel());
    object dp_temp_max_today=dom.GetObject('Temp Max Heute');
    object dp_temp_min_today=dom.GetObject('Temp Min Heute');
    object dp_hum_max_today=dom.GetObject('Luftfeuchte Max Heute');
    object dp_hum_min_today=dom.GetObject('Luftfeuchte Min Heute');
    object dp_wind_max_today=dom.GetObject('Wind Max Heute');
    object dp_rain_today=dom.GetObject('Regen Heute');
    object dp_sun_today_temp=dom.GetObject('Sonnenminuten Heute');
    object dp_sun_today=dom.GetObject('Sonnenstunden Gestern');
    object dp_bright_avg=dom.GetObject('Helligkeit gefiltert');
    var pos1=wds_name.Find("TEMPERATURE");
    real temp=dp_wds_channel.DPByHssDP("TEMPERATURE").Value();
    real wind=dp_wds_channel.DPByHssDP("WIND_SPEED").Value();
    real bright=dp_wds_channel.DPByHssDP("BRIGHTNESS").Value();
    integer humidity=dp_wds_channel.DPByHssDP("HUMIDITY").Value();
    if(pos1!=-1)
    {
      var diff=dp_wds_channel.DPByHssDP("RAIN_COUNTER").Value()-dp_wds_channel.DPByHssDP("RAIN_COUNTER").LastValue();
      if((1.0*diff)<0.0)
      {
          diff=(1.0*diff)+dp_wds_channel.DPByHssDP("RAIN_COUNTER").ValueMax();
      }
      dp_rain_today.State(1.0*(dp_rain_today.Value())+diff);

      var diff=dp_wds_channel.DPByHssDP("SUNSHINEDURATION").Value()-dp_wds_channel.DPByHssDP("SUNSHINEDURATION").LastValue();
      if((1.0*diff)<0.0)
      {
         diff=(1.0*diff)+dp_wds_channel.DPByHssDP("SUNSHINEDURATION").ValueMax();
      }
      dp_sun_today_temp.State((60.0*(dp_sun_today_temp.Value())+diff)/60.0);
      dp_sun_today.State(dp_sun_today_temp.Value())/60;

      if(temp>dp_temp_max_today.Value())
      {
        dp_temp_max_today.State(temp);
      }
      if(temp<dp_temp_min_today.Value())
      {
        dp_temp_min_today.State(temp);
      }

      if(wind>dp_wind_max_today.Value())
      {
        dp_wind_max_today.State(wind);
      }

      dp_bright_avg.State(((7.0*dp_bright_avg.Value())+(1.0*bright))/8);

      if(humidity>dp_hum_max_today.Value())
      {
        dp_hum_max_today.State(humidity);
      }
      if(humidity<dp_hum_min_today.Value())
      {
        dp_hum_min_today.State(humidity);
      }
    }
    else
    {
      var x=dom.GetObject('Temp Max Gestern').State(dp_temp_max_today.Value());
      x=dom.GetObject('Temp Min Gestern').State(dp_temp_min_today.Value());
      x=dom.GetObject('Luftfeuchte Max Gestern').State(dp_hum_max_today.Value());
      x=dom.GetObject('Luftfeuchte Min Gestern').State(dp_hum_min_today.Value());
      x=dom.GetObject('Wind Max Gestern').State(dp_wind_max_today.Value());
      x=dom.GetObject('Regen Gestern').State(dp_rain_today.Value());
      x=dom.GetObject('Sonnenstunden Gestern').State(dp_sun_today.Value());

      dp_temp_max_today.State(temp);
      dp_temp_min_today.State(temp);
      dp_hum_max_today.State(humidity);   
      dp_hum_min_today.State(humidity);
      dp_wind_max_today.State(wind);
      dp_rain_today.State(0);
      dp_sun_today_temp.State(0);
    }
Dateianhänge
Bildschirmfoto 2018-03-02 um 22.16.58.png

Rocco2
Beiträge: 6
Registriert: 27.10.2014, 19:14

Re: OC3 Kombisensor Regenmenge

Beitrag von Rocco2 » 05.04.2018, 20:43

Hallo zusammen,
die hier verwendete Beschreibung bezieht sich ja auf die "alte" Wetterstation". Hat schon jemand die gleichen Systemvariablen und das Skript auf der neuen IP Wetterstation ausprobiert?

Antworten

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