bluerai / ioBroker.mobile-alerts

Mobile Alerts for ioBroker - an adapter to download data from the Mobile Alerts server
MIT License
7 stars 5 forks source link

Keine Datenübernahme der Mobile.Alerts Wind- und Regen Sensoren mit dem example.js-Script #32

Open MicGei opened 11 months ago

MicGei commented 11 months ago

Hallo, habe leider auch Probleme mit Auslesen der Sensoren mit dem example.js-Script. Ich abe versucht es anzupassen, aber es funktionieren nur die Temperatur- und Luftfeuchte-Sensoren. Windsensor und Regensensor geben falsche Werte:

const measurement05 = new Map([ ["t1", {name: "Regenmenge", type: "number", unit: "mm"}], ["ts", {name: "Timestamp", type: "number", unit: "sec"}], ["lb", {name: "Low Battery", type: "boolean", unit: ""}]]);

const measurement06 = new Map([ ["ws", {name: "Windgeschwindigkeit", type: "number", unit: "km/h"}], ["wg", {name: "Böe", type: "number", unit: "km/h"}], ["wd", {name: "Windrichtung", type: "booleen", unit: ""}], ["ts", {name: "Timestamp", type: "number", unit: "sec"}]]);

Ich habe leider zu wenig Ahnung! Kann mir jemand helfen. Vielleicht könnte man auch Beispiel- Wind- und Regensensoren in das example.js-Script einpflegen?

bluerai commented 11 months ago

Hi, ich habe mal Measurements für Regen. bzw. Windsensoren in example.js ergänzt. Wäre schön, wenn du mal testet und mir eine Rückmeldung zukommen lässt, da ich keine eigene Regen-/Windsensoren habe. Gruß Rai

MicGei commented 11 months ago

Hi, erstmal vielen Dank für die schnelle Reaktion. Der Windsensor funktioniert nun bestens. Der Regensensor leider noch nicht. Er zeigt leider weiterhin einen falschen (viel zu hohen) Wert an. Ich kann dem angezeigten Wert auch keinem anderen Zeitraum (24 h, monatlich oder so) zuordnen. Hat der Regensensor überhaupt eine Temperaturmessmöglichkeit (wird ja auch ausgegeben)?

bluerai commented 11 months ago

Hallo, ich setze die Werte so, wie sie vom Mobile-Alerts-Server geliefert werden. Laut Doku ist Regenmenge r definiert als "The rain value in mm. 0.258 mm of rain are equal to one flip". Wobei ich nicht weiß, was hier 1 Flip ist. Die Angabe der Temperatur ergibt sich ebenfalls aus der Doku. Ich besitze keinen Regensensor, daher weiß ich nicht, ob dein Regensensor eine Temperaturmessung unterstützt. Es gibt vielleicht verschiedene Versionen. Gruß Rai

bluerai commented 11 months ago

Hallo, hier sind zur Ergänzung die Daten, die ich mit den Testsensoren von MobileAlerts erhalte. Der Regensensor hat die Id "0816B9D3591E". Die Regenmenge von über 44 mm kommt mir ebenfalls sehr hoch vor. Könnte das der Wert sein, der sich von einem Starttermin aus ergibt? Dann muss du für die tägliche Regenmenge immer die Differenz von Tag zu Tag nehmen. Es müsste dann auch eine Funktion, einen Schalter o.Ä. geben, die den Sensor zurück auf 0 mm setzt.

info javascript.0 (653) script.js.common.Integration.MobileAlertsExample: { "devices": [ { "deviceid": "1200099803A1", "lastseen": 1697723221, "lowbattery": false, "measurement": { "idx": 178344, "ts": 1697723212, "c": 1697723217, "lb": false, "t1": 23.4, "h": 44.0, "h3havg": 43.0, "h24havg": 42.0, "h7davg": 51.0, "h30davg": 56.0 } }, { "deviceid": "090005AC99E2", "lastseen": 1697723764, "lowbattery": false, "measurement": { "idx": 5020316, "ts": 1697723756, "c": 1697723761, "lb": false, "t1": 17.2, "t2": 11.3, "h": 63.0 } }, { "deviceid": "0301548CBC4A", "lastseen": 1697723709, "lowbattery": false, "measurement": { "idx": 6507331, "ts": 1697723704, "c": 1697723707, "lb": false, "t1": 8.9, "h": 81.0 } }, { "deviceid": "034A9045C882", "lastseen": 1697723578, "lowbattery": false, "measurement": { "idx": 5358626, "ts": 1697723575, "c": 1697723578, "lb": false, "t1": 22.0, "h": 45.0 } }, { "deviceid": "04419803C1B0", "lastseen": 1682997090, "lowbattery": true, "measurement": { "idx": 229948, "ts": 1682997084, "c": 1682997090, "lb": true, "t1": 65295.0, "t2": 0.0, "h": 43530.0 } }, { "deviceid": "0706D3E17D33", "lastseen": 1677099921, "lowbattery": true, "measurement": { "idx": 1943589, "ts": 1677099917, "c": 1677099921, "lb": true, "t1": 22.2, "t2": 21.8, "h": 37.0, "h2": 38.0 } }, { "deviceid": "0816B9D3591E", "lastseen": 1697721982, "lowbattery": false, "measurement": { "idx": 12010, "ts": 1697719929, "c": 1697719929, "lb": false, "sc": true, "t1": 7.6, "r": 44.376000000000005, "rf": 172, "rr": 0.0 } }, { "deviceid": "0B0075E315BB", "lastseen": 1696759218, "lowbattery": false, "measurement": { "idx": 18488470, "ts": 1696759218, "c": 1696759223, "lb": false, "ws": "0.1", "wg": "1.4", "wd": 3 } }, { "deviceid": "10246A3EB617", "lastseen": 1697722124, "lowbattery": false, "measurement": { "idx": 484898, "ts": 1634802362, "c": 1634802368, "w": true, "wsct": true, "wutt": true } } ], "success": true }

MicGei commented 11 months ago

Bei mir wir im iobroker mit dem Script eine Regenmenge von 44.376000000000005 mm ausgegeben und eine Temperatur von 7.6 Grad (was wahrscheinlich Blödsinn ist , wenn nicht ein versteckter Temperaturfühler mit im Regenmesser verbaut ist. Die Regenmenge wird darin über eine Messwippe ermittelt. Deshalb wahrscheinlich die Flips. Vielleicht hilft der Test mit meinen Originaldaten: Regenmesser: ID 081186F22C11 Zeitpunkt 19.10.2023 05:12:17 Regen 5,4 mm Das wird auch in der Handy-App so angezeigt.

Im ursprünglichen Adapter wurden die Werte korrekt angezeigt, solange er lief. Für mehr Input reichen meine Programmierfähigkeiten leider nicht aus.

bluerai commented 11 months ago

Frage: Was sagen die 5,4 mm Regenmenge aus? Ist das seit Tagesbegin, seit Wochenbeginn, in der letzten Stunde oder ....?

MicGei commented 11 months ago

Der neue Wert ist jetzt: Zeitpunkt 19.10.2023 19:41:11 Regen 5,9 mm Laut Erklärung der APP ist das der Wert "Regen der letzten 24 Stunden". Das ist der Wert, der auch auf der Website abrufbar ist. Der Wert entspricht dem Wert, der auch über den Adapter abgerufen wurde.

In der App ist auch noch ein Wert "Regen der letzten Stunde" (derzeit 0,3 mm) abrufbar.

bluerai commented 11 months ago

Hi, der Adapter fragt eine andere Webseite ab --> nicht zu vergleichen mit der Abfrage der REST API. Über die API erhalte ich den o.g. Wert ("Regen der letzten 24 Stunden") nicht. Wenn du bestimmte Auswertungen der Regenmenge haben willst, musst du ein passendes Programm hinten anhängen. Vielleicht hilft dir iobroker/history oder sonst etwas selbst geschriebenes (z.B. mit JavaScript oder Blockly). Sorry, ich kann dir hier nicht weiterhelfen. Gruß Rai

MicGei commented 11 months ago

Nochmals vielen Dank für die Hilfe. Ich habe einen einfacherer Weg gefunden. Ich hole mir mit dem Parser im iobroker den Wert direkt von der Website. das reicht erstmal. Falls andere Interesse haben: Anleitung unter: https://www.schimmer-media.de/forum/thread/2888-technoline-sensoren-und-mobile-alerts/

sponkpi commented 10 months ago

Hallo, vielen Dank für diesen neuen Weg, so kann ich die Wetterstation weiterhin nutzen. Ich habe mir die Datenpunkte allerdings unter 0-userdata angelegt und ein Skript für die Berechnung der Regenmenge der letzten 24 Stunden hinzugefügt, läuft top. Danke.

bluerai commented 10 months ago

Hi, sponkpi, schön, dass das Script für dich nützlich ist! Richtig: Empfohlen wird die User-Datenpunkte unter 0_userdata anzulegen. Werde ich noch ändern. Für andere Benutzer wäre es vielleicht hilfreich, dein Skript für die Berechnung der Regenmenge der letzten 24 Stunden hier zu posten. Wenn es dir möglich ist ... Danke dafür jedenfalls von mir. Gruß Rai

sponkpi commented 10 months ago

Hallo, lass es mich erst ein paar Tage testen. Die Idee habe ich mir vom YT Kanal "Verdrahter" hier https://www.youtube.com/watch?v=5cJh2kvqa40&t=70s abgeholt. Hat tatsächlich auch ein Anfänger wie ich geschafft...

sponkpi commented 9 months ago

So. - Nach einer Testphase ist es für mich so in Ordnung.

Ich habe zwei Datenpunkte unter 0-userdata angelegt:

Der Datenpunkt:

Hier nochdas Blockly Skript:


`<xml xmlns="https://developers.google.com/blockly/xml">
  <variables>
    <variable id="W.S6MwtS@#?Gd)#b)r-w">Liste</variable>
    <variable id="^)2PzCQ?NMm9?7I%4plx">Anzahl</variable>
  </variables>
  <block type="controls_if" id="R;x7sqV@@f{_m-}}~J)M" x="88" y="88">
    <mutation else="1"></mutation>
    <value name="IF0">
      <block type="get_value" id="gLQlKb|1L(-aftTWO;Is">
        <field name="ATTR">val</field>
        <field name="OID">0_userdata.0.mobileAlerts.Regenmenge_letzte_24_Stundenliste</field>
      </block>
    </value>
    <statement name="DO0">
      <block type="comment" id="MeD-#Yh:sz#0!uws88S#">
        <field name="COMMENT">Wenn es bereits einen Wert gibt...</field>
        <next>
          <block type="variables_set" id="MxhLS)f+0K-{G*axB_u0">
            <field name="VAR" id="W.S6MwtS@#?Gd)#b)r-w">Liste</field>
            <value name="VALUE">
              <block type="get_value" id="Q2=SZls]#%J{C4|159rP">
                <field name="ATTR">val</field>
                <field name="OID">0_userdata.0.mobileAlerts.Regenmenge_letzte_24_Stundenliste</field>
              </block>
            </value>
          </block>
        </next>
      </block>
    </statement>
    <statement name="ELSE">
      <block type="comment" id="[uIEXfLc/dd=d-NJ0q,v">
        <field name="COMMENT">Wenn es keinen Wert gibt, erzeuge neue Liste...</field>
        <next>
          <block type="variables_set" id="`F,}Z8N)]V#-%w6u;(8x">
            <field name="VAR" id="W.S6MwtS@#?Gd)#b)r-w">Liste</field>
            <value name="VALUE">
              <block type="lists_create_with" id="LGqh$OXk.O)^UJp1JBse">
                <mutation items="0"></mutation>
              </block>
            </value>
            <next>
              <block type="update" id="dNQDO`Ktk$yWSb8z:]G3">
                <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                <field name="OID">0_userdata.0.mobileAlerts.Regenmenge_letzte_24_Stundenliste</field>
                <field name="WITH_DELAY">FALSE</field>
                <value name="VALUE">
                  <block type="variables_get" id=":k^%x@qez;n]^uH2(xC3">
                    <field name="VAR" id="W.S6MwtS@#?Gd)#b)r-w">Liste</field>
                  </block>
                </value>
              </block>
            </next>
          </block>
        </next>
      </block>
    </statement>
    <next>
      <block type="comment" id="*|;@m@+4p+7o7^:Ha6D=">
        <field name="COMMENT">hier die Anzahl der Werte festlegen</field>
        <next>
          <block type="variables_set" id="CHOeCSNQm[x_NOkQtR|8">
            <field name="VAR" id="^)2PzCQ?NMm9?7I%4plx">Anzahl</field>
            <value name="VALUE">
              <block type="math_number" id="IO(~}oJw/oClh0v7m9ZK">
                <field name="NUM">25</field>
              </block>
            </value>
            <next>
              <block type="comment" id="`W-d,JuS1Am:MyAGTD!?">
                <field name="COMMENT">hier die Häufigkeit festlegen - alle 60 MIn.</field>
                <next>
                  <block type="schedule" id="/ZKNRkO)#3TR*Dt69X.C">
                    <field name="SCHEDULE">*/60 * * * *</field>
                    <statement name="STATEMENT">
                      <block type="controls_if" id="lbN4H1.bo@c|0kkpos=1">
                        <value name="IF0">
                          <block type="logic_compare" id="6gowL{~)(my7G:-FUjCj">
                            <field name="OP">GTE</field>
                            <value name="A">
                              <block type="lists_length" id="i=#5Age,Ni)/yB?rkZsc">
                                <value name="VALUE">
                                  <block type="variables_get" id=".V7bNm]91V{p[PuML-{h">
                                    <field name="VAR" id="W.S6MwtS@#?Gd)#b)r-w">Liste</field>
                                  </block>
                                </value>
                              </block>
                            </value>
                            <value name="B">
                              <block type="variables_get" id=".~6_HN(mSnMj4a#PBYOP">
                                <field name="VAR" id="^)2PzCQ?NMm9?7I%4plx">Anzahl</field>
                              </block>
                            </value>
                          </block>
                        </value>
                        <statement name="DO0">
                          <block type="lists_getIndex" id="qa!@{yS`d)OsNM*:|lC~">
                            <mutation statement="true" at="false"></mutation>
                            <field name="MODE">REMOVE</field>
                            <field name="WHERE">FIRST</field>
                            <value name="VALUE">
                              <block type="variables_get" id="X(|6z|%Aij{]y8LwUjeP">
                                <field name="VAR" id="W.S6MwtS@#?Gd)#b)r-w">Liste</field>
                              </block>
                            </value>
                          </block>
                        </statement>
                        <next>
                          <block type="lists_setIndex" id="NcH5Z;$zWuI(;e=$ID+?">
                            <mutation at="false"></mutation>
                            <field name="MODE">INSERT</field>
                            <field name="WHERE">LAST</field>
                            <value name="LIST">
                              <block type="variables_get" id="l]09o~B1CT)5(=NP,a+K">
                                <field name="VAR" id="W.S6MwtS@#?Gd)#b)r-w">Liste</field>
                              </block>
                            </value>
                            <value name="TO">
                              <block type="math_rndfixed" id="Z,B+|zNO|*DPp`()dQv=">
                                <field name="n">1</field>
                                <value name="x">
                                  <shadow type="math_number" id="nHz@?~`ht)/g)te=^~$T">
                                    <field name="NUM">3.1234</field>
                                  </shadow>
                                  <block type="get_value" id="2,Wqm6Eu0t@4P4sliYew">
                                    <field name="ATTR">val</field>
                                    <field name="OID">0_userdata.0.mobileAlerts.Regenmenge_Jahr</field>
                                  </block>
                                </value>
                              </block>
                            </value>
                            <next>
                              <block type="update" id=".pGeL%hc/coL!iH5vxVw">
                                <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                <field name="OID">0_userdata.0.mobileAlerts.Regenmenge_letzte_24_Stundenliste</field>
                                <field name="WITH_DELAY">FALSE</field>
                                <value name="VALUE">
                                  <block type="variables_get" id="B7JCKDIU,^BMB{7UJS|=">
                                    <field name="VAR" id="W.S6MwtS@#?Gd)#b)r-w">Liste</field>
                                  </block>
                                </value>
                                <next>
                                  <block type="update" id="cWiO!TX{3~!Gwjr^hp,j">
                                    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                    <field name="OID">0_userdata.0.mobileAlerts.Regenmenge_letzte_24_Stunden</field>
                                    <field name="WITH_DELAY">FALSE</field>
                                    <value name="VALUE">
                                      <block type="math_rndfixed" id="]poMoUJcE%0[s`lQ(I88">
                                        <field name="n">1</field>
                                        <value name="x">
                                          <shadow type="math_number" id="lL^/MkZO/5y(k2S-;^7F">
                                            <field name="NUM">3.1234</field>
                                          </shadow>
                                          <block type="math_arithmetic" id="HG;|*:aJ@*It6x[w_rEH">
                                            <field name="OP">MINUS</field>
                                            <value name="A">
                                              <shadow type="math_number" id="{Hd=6=;5znM?9QI2Lp:7">
                                                <field name="NUM">1</field>
                                              </shadow>
                                              <block type="lists_getIndex" id="w~vuv8V8*#9;SrNwlsIf">
                                                <mutation statement="false" at="false"></mutation>
                                                <field name="MODE">GET</field>
                                                <field name="WHERE">LAST</field>
                                                <value name="VALUE">
                                                  <block type="variables_get" id=":^=yp8r)O:[y-sURv=},">
                                                    <field name="VAR" id="W.S6MwtS@#?Gd)#b)r-w">Liste</field>
                                                  </block>
                                                </value>
                                              </block>
                                            </value>
                                            <value name="B">
                                              <shadow type="math_number" id="O)=vqQC.c]{*:_%#XEdN">
                                                <field name="NUM">1</field>
                                              </shadow>
                                              <block type="lists_getIndex" id="H*}GJs/jcYke~XQ.CgNy">
                                                <mutation statement="false" at="false"></mutation>
                                                <field name="MODE">GET</field>
                                                <field name="WHERE">FIRST</field>
                                                <value name="VALUE">
                                                  <block type="variables_get" id="Lcku4):Pit@oB|]ms/o-">
                                                    <field name="VAR" id="W.S6MwtS@#?Gd)#b)r-w">Liste</field>
                                                  </block>
                                                </value>
                                              </block>
                                            </value>
                                          </block>
                                        </value>
                                      </block>
                                    </value>
                                  </block>
                                </next>
                              </block>
                            </next>
                          </block>
                        </next>
                      </block>
                    </statement>
                  </block>
                </next>
              </block>
            </next>
          </block>
        </next>
      </block>
    </next>
  </block>
</xml>`
mibr85 commented 9 months ago

Hallo Sponkpi diesen Teil verstehe ich nicht. Kannst du den noch mal genauer erklären?

Der Datenpunkt:

* _Regenmenge_Jahr_
  stammt aus den Daten von mobile Alerts.

In deinem eingefügten Code musst du noch den "´" am anfang und am ende entfernen sonst bekommt man beim einfügen einen Fehler ;-) Danke dir fürs teilen

jevylux commented 8 months ago

Hallo, ich habe ein problem mit dem javascript. ich habe deshalb versucht ein wenig zu debugen komme aber nicht weiter. Wenn das curl Kommando ausgeführt wird erhalte ich ein 'undefined' in der variable error. Ich habe deshalb den test erweitert auf 'if (error !== null && error !== undefined) ' jetzt wirtd die Fehlerbehandlung übersprungen, ich bekomme aber jetzt folgenden Fehler in der zeile let obj = JSON.parse(stdout); javascript.0 (2224009) script.js.common.mobilealerts: SyntaxError: Unexpected token u in JSON at position 0

wenn ich das url kommando in einem terminal starte, kriege ich Daten und "succes":true zurück

Hier sind meine paar Anderungen zum debug:

`exec(urlClientCmd, function (error, stdout, stderr) { execCounter = ++execCounter % 1000; execDuration = Math.round((new Date().getTime() - execDuration) / 100) / 10; //Startwert setzen maxExecDuration = Math.max(maxExecDuration, execDuration);

log("curl ( "+urlClientCmd + "  ) returns error " + error)
log(stdout)

if (error !== null && error !== undefined) {
    log('Mobile Alerts: (1) Receiving Data ended with errorcode ' +  error.code + '(#' + execCounter + ", " + execDuration + " sec).", "error");
    receivingData = false;
    return;
}

let obj = JSON.parse(stdout);`
jevylux commented 8 months ago

Ich glaube ich habe das Problem gefunden. wenn ich im Debug mode bin, scheint das curl Kommando nicht ausgeführt zu werden. Die Aenderung von if (error !== null ) { auf if (error !== null && error !== undefined) { scheint mein Problem zu lösen