Mobile Alerts Temperatur und Luftfeuchte Sensoren in Fhem

Begonnen von hankyzoolander, 16 August 2015, 16:39:12

Vorheriges Thema - Nächstes Thema

Bara

Hallo Jens,
Hast Du inzwischen einen Weg gefunden wieder auf die Daten zuzugreifen?
Leider sind meine Kenntnisse in fhem dazu nicht ausreichend! Grundsätzlich ärgert mich die Philosophie von Mobile Alerts dermaßen, daß ich schon überlege die Sensoren zu tauschen . Jedesmal ein riesengroßer Aufwand, lediglich um die eigenen Daten in eine ansprechende Kurve zu bringen!
VG
Rainer
Grüße
Rainer

josburg

Hallo,

ja, habe es über folgenden RegEx gelöst:

<h4>ABCABCABCABCABC<\/h4>\s+<\/div>\s+<\/div>\s+<div class="nofloat"><\/div>\s+<div class="sensor-component">\s+<h5>Zeitpunkt<\/h5>\s+<h4>.*?<\/h4>\s+<\/div>\s+<div class="sensor-component">\s+<h5>Temperatur<\/h5>\s+<h4>+([0-9\,]+)

Elegant ist sicherlich anders ;-)

Der Wert ABCABCABCABCABC in der RegEx ist die Nummer der ID des jeweiligen Sensors.

Mein Problem ist aktuell, dass die Temperatur auf der Internetseite mit "," angegeben wird und nicht mit "."
Bisher hatte ich als Wert 20.1
Heute habe ich als Wert 20,1

Kann mir jemand weiterhelfen, wie ich das evtl. direkt mit dem passenden regulären Ausdruck ersetzen kann?

Vielen Dank.

Viele Grüße
Jens

hankyzoolander

Hallo,
versuch mal am Ende (\d\d.\d)
wenn du das "C oder das % Zeichen" auch noch dahinter willst, dann am Ende (\d\d.\d\D)
hab es jetzt getestet, aber so hatte ich die Werte vorher ausgelesen.
Bin an der "perfekten" regex dran.
Wenn sie fertig ist stell ich sie ein.
Versuche alle meine 9 Sensoren in ein HTTPMOD zu packen, und aktualisiere diesen dann alle 10 Min.
Somit möchte ich den Datentraffic bei mir und auch den Traffic des Servers von Mobile Alerts reduzieren. Alle 20-30 min würde auch reichen. Die Sensoren messen eh nur alle 7Min. Und wer braucht schon alle paar Sekunden oder Minuten die gemessenen Werte. Wenn man bedenkt das alle paar Sekunden eine Anfrage auf den Server kommt, und das in meinem Fall x9. Da kommt schon etwas zusammen über den Tag. Möchte jetzt nicht rumpredigen ;-)
Aber ich denke wenn man es gut verpackt und Traffic freundlich macht, auch die Jungs und Mädels von Mobile Alerts ein Einsehen haben. (Hoffe ich)
betateilchen  <--- my personal hero

josburg

Hallo hankyzoolander,

vielen Dank für Deine Hilfe und Unterstützung - Deine Ideen sind natürlich richtig. Ich wäre sehr an Deiner Lösung interessiert.

Bis es soweit ist:
Ich habe meine RegEx folgendermaßen angepasst:

<h4>ABC<\/h4>\s+<\/div>\s+<\/div>\s+<div class="nofloat"><\/div>\s+<div class="sensor-component">\s+<h5>Zeitpunkt<\/h5>\s+<h4>.*?<\/h4>\s+<\/div>\s+<div class="sensor-component">\s+<h5>Temperatur<\/h5>\s+<h4>+(\d\d.\d)


Das HTML sieht folgendermaßen aus:

        <h4>ABC</h4>
    </div>
</div>

<div class="nofloat"></div>

    <div class="sensor-component">
        <h5>Zeitpunkt</h5>
        <h4>22.06.2016 07:32:57</h4>
    </div>
    <div class="sensor-component">
        <h5>Temperatur</h5>
        <h4>19,0 C</h4>
    </div>
    <div class="sensor-component">
        <h5>Luftfeuchtigkeit</h5> <!-- Luftfeuchtigkeit -->
        <h4>82%</h4>
    </div>
        </div>
    </div>
</div>


Im Reading steht bei mir trotzdem eine Zahl mit Komma (siehe Screenshots im Anhang).
Kannst Du evtl. nochmal weiter helfen?

Vielen Dank.

hankyzoolander

#79
Hallo, hab da was gebastelt.
So kannst du deine Sensoren in einem HTTPMOD abfragen.
Musst halt für jeden Sensor den readingsName und readingsRegex
anpassen. Sonst hast du später in den readings kein überblick mehr.

Das mit dem komma ist jetzt halt so. Vorher waren die Werte mit einem Punkt getrennt. Jetzt halt durch ein komma. Die regex ließt genau das aus was dort steht. Habe aber schon etwas gefunden um das komma mit einem Punkt zu ersetzen. Muss da aber noch basteln.
Wenn ich damit fertig bin stelle ich es ein.


define sensoren HTTPMOD http://measurements.mobile-alerts.eu/Home/SensorsOverview?phoneid=DEINE ID
attr sensoren readingsName_BadKellerTemp BadKellerTemp
attr sensoren redingsRegex_BadKellerTemp (?s)<h4>123456789012.*?<h4>.*?<h4>(\d\d,\d)           ((123456789012= Deine SensorID))

attr sensoren readingsName_BadKellerFeuchte BadKellerFeuchte
attr sensoren readingsRegex_BadKellerFeuchte (?s)<h4>123456789012.*?<h4>.*?<h4>.*?<h4>(\d\d)          ((123456789012Deine SensorID))
betateilchen  <--- my personal hero

costa2

#80
Hallo.

Ich habe mich mal mit angehängt.

Dieser Code bringt eine Fehlermeldung:

define sensoren HTTPMOD http://measurements.mobile-alerts.eu/Home/SensorsOverview?phoneid=000003373159
attr sensoren readingsName_Aussen Aussen Temp
attr sensoren redingsRegex_Aussen (?s)<h4>0315A0100000.*?<h4>.*?<h4>(\d\d,\d)           

attr sensoren readingsName_Aussen Feuchte
attr sensoren readingsRegex_Aussen (?s)<h4>0315A0100000.*?<h4>.*?<h4>.*?<h4>(\d\d)


Fehlermeldung:
sensoren: the attribute readingsName_Aussen should no longer be used. Please use reading01Name syntax instead

Deshalb habe ich es angepasst:

define SENSOR_AUSSEN HTTPMOD http://measurements.mobile-alerts.eu/Home/SensorsOverview?phoneid=000003373159
attr SENSOR_AUSSEN reading01Name Temperatur
attr SENSOR_AUSSEN reading01Regex (?s)<h4>0315A0100000.*?<h4>.*?<h4>([\-\d\.]+)
attr SENSOR_AUSSEN reading02Name Luftfeuchtigkeit
attr SENSOR_AUSSEN reading02Regex (?s)<h4>0315A0100000.*?<h4>.*?<h4>(\d?\d.\d)


Allerdings wird nun für Temperatur und Feuchte jeweils der Temperaturwert ausgegeben und die Nachkommastelle der Temperatur ist immer "0"

Wo ist der Fehler?



Gruß,
Volker
RPI3, Nanocul 433 MHz, 433 MHz Steckdosen, DVB-T Stick für 868 MHz TX Sensoren, MOBILE ALERTS Sensoren und Gateway

hankyzoolander

#81
Hallo,
ich glaube der Fehler kommt weil du
Zitatattr sensoren readingsName_Aussen Aussen Temp
das Leerzeichen und Temp mit angegeben hast.

wenn du es so machst,
Zitatattr SENSOR_AUSSEN reading01Name Temperatur

attr SENSOR_AUSSEN reading02Name Luftfeuchtigkeit

bekommst du sicherlich die Werte angezeigt, aber doch nur als Reading Temperatur und als Luftfeuchtigkeit.
Der Gedanke war das wenn du z.b. 10 Sensoren in deinem Haus hast alle in einem HTTPMOD abgerufen werden und alle Werte von den Sensoren zuordbar in den Readings stehen. Wenn ich mit meiner Theorie richtig liege hättest du mit diesen Codes 10 mal Temperatur und 10 mal Luftfeuchtigkeit in den Readings stehen.
Deshalb dachte ich das man den readingsName von den einzelnen Sensoren anpasst. ich zeig euch mal wie ich meine.

attr sensoren readingsName_BadKellerTemp BadKellerTemp
attr sensoren readingsName_BadKellerFeuchte BadkellerFeuchte
attr sensoren readingsName_WintergartenTemp WintergartenTemp
attr sensoren readingsName_WintergartenFeuchte WintergartenFeuchte
attr sensoren readingsName_WohnzimmerTemp WohnzimmerTemp
attr sensoren readingsName_WohnzimmerFeuchte WohnzimmerFeuchte
und so weiter.
Damit bekommst du in den Readings vom HTTPMOD die Werte mit den entsprechenden Namen angezeigt. z.b.

BadKellerTemp                 20,4
BadKellerFeuchte             70
WintergartenTemp           28,8
WintergartenFeuchte      45
WohnzimmerTemp           26,4
WohnzimmerFeuchte       50
so sollten dann die ganzen Readings aussehen.
Dann könntest du die Werte auch einfacher weiterverwenden für notify usw.
Hänge mal noch ein Bild hinzu wie es in meinem "TEST" aussieht.
Zur aktualisierung denke ich das alle halbe Stunde evt reichen könnte. Somit hätte man am Tag 48 Anfragen auf den Server und alle seine Werte mit jeder einzelnen Anfrage.
betateilchen  <--- my personal hero

hankyzoolander

war da nicht ein Post wo jemand geschrieben hat wie er das Problem mit dem Komma und Punkt gelöst hatte??
das ist irgendwie nicht mehr da glaube ich??  :o
betateilchen  <--- my personal hero

costa2

#83
Das war von mir.
Hat scheinbar nicht funktioniert.

Das Problem besteht weiterhin:
PERL WARNING: Argument "23,8" isn't numeric in sprintf at (eval 242) line 1.

Deshalb bekomme ich im Tablet UI auch keine Nachkommastelle angezeigt, sie ist immer "0".

Der Abruf der Daten funktioniert nun immerhin schon mal.

define sensoren HTTPMOD http://measurements.mobile-alerts.eu/Home/SensorsOverview?phoneid=000000000
attr sensoren userattr event-on-change-reading event-on-update-reading fp_Grafiken fp_Klima fp_Temperatur fp_room
attr sensoren event-on-update-reading .*
attr sensoren icon temp_outside
attr sensoren readingsName_SENSOR_AUSSENFeuchte SENSOR_AUSSENFeuchte
attr sensoren readingsName_SENSOR_AUSSENTemp SENSOR_AUSSENTemp
attr sensoren readingsRegex_SENSOR_AUSSENFeuchte (?s)<h4>0000000000.*?<h4>.*?<h4>.*?<h4>([\-\d\.]+)
attr sensoren readingsRegex_SENSOR_AUSSENTemp (?s)<h4>0000000000.*?<h4>.*?<h4>(\d\d,\d)
attr sensoren room Außentemperatur und Luftfeuchtigkeit,all


Nur wie erstelle ich nun ein Logfile daraus, welches die verschiedenen Sensoren separiert?
RPI3, Nanocul 433 MHz, 433 MHz Steckdosen, DVB-T Stick für 868 MHz TX Sensoren, MOBILE ALERTS Sensoren und Gateway

hankyzoolander

#84
wo bekommst du keine Nachkommastelle angezeigt??
feuchte oder Temp?
bei der Feuchte brauch ich kein komma. Da die Sensoren im Display z.b. 57% anzeigen.
Also ohne Kommastelle.
Nur bei der Temperatur wird auch im Display die Kommastelle angezeigt. 24,5°C
Häng mal bei der Feuchte am Ende nur das hier an.

(\d\d)
betateilchen  <--- my personal hero

costa2

#85
Im Tablet UI ist die Nachkommastelle immer 0.
Ich nehme an, das es ebenfalls nicht mit dem Komma zurecht kommt.

data-min="-20" data-max="35" data-step=".1" data-unit=""

Der untere Wert 17.1 ist noch aus guten alten Zeiten.



RPI3, Nanocul 433 MHz, 433 MHz Steckdosen, DVB-T Stick für 868 MHz TX Sensoren, MOBILE ALERTS Sensoren und Gateway

josburg

Hallo zusammen,

anscheinend gibt es ganze 3 Mobile Alerts User ;-) die sich um eine Lösung kümmern oder wir sind die Einzigen, die andere Lösungen nicht mitbekommen ;-)

Das mit dem Punkt und Komma habe ich mit folgender Zeile gelöst, welche ich aus einem anderen Thread habe:
attr SENSOR_HUETTE reading01Expr $val =~ s/,/\./;; $val;;

So habe ich jetzt zumindest wieder einen komplett funktionierenden Temperatur- & Luftfeuchte-Wert.
TabletUI sowie das statistics-Modul kommt bei mir damit zurecht und alles funktioniert soweit.

Bei mir ist jetzt der Regen- und Windsensor die nächste Herausforderung.

Wenn ich weiter bin, poste ich das dann auch wieder.

Ich denke, dass wir anschließend aus allen Fortschritten eine optimale Lösung bekommen  ::)

Viele Grüße
Jens

costa2

#87
So weit okay.

Nun habe ich aber wieder das Problem mit den negativen Temperaturen.

So (\d\d,\d) werden keine negativen Temperaturwerte registriert, aber die Nachkommastelle erscheint mit den richtigen Zentelwerten.

So ([\-\d\.]+) werden die negativen Temperaturwerte registriert, aber die Nachkommastelle zeigt 0.


Volker
RPI3, Nanocul 433 MHz, 433 MHz Steckdosen, DVB-T Stick für 868 MHz TX Sensoren, MOBILE ALERTS Sensoren und Gateway

costa2

Die Werte werden nun korrekt angezeigt:

attr SENSOR_AUSSEN reading01Regex (?s)<h4>0000000000.*?<h4>.*?<h4>([\-\d\d\,\d]+)

RPI3, Nanocul 433 MHz, 433 MHz Steckdosen, DVB-T Stick für 868 MHz TX Sensoren, MOBILE ALERTS Sensoren und Gateway

josburg

Zitat von: hankyzoolander am 25 Juni 2016, 09:05:06
Hallo, hab da was gebastelt.
So kannst du deine Sensoren in einem HTTPMOD abfragen.
Musst halt für jeden Sensor den readingsName und readingsRegex
anpassen. Sonst hast du später in den readings kein überblick mehr.

Das mit dem komma ist jetzt halt so. Vorher waren die Werte mit einem Punkt getrennt. Jetzt halt durch ein komma. Die regex ließt genau das aus was dort steht. Habe aber schon etwas gefunden um das komma mit einem Punkt zu ersetzen. Muss da aber noch basteln.
Wenn ich damit fertig bin stelle ich es ein.


define sensoren HTTPMOD http://measurements.mobile-alerts.eu/Home/SensorsOverview?phoneid=DEINE ID
attr sensoren readingsName_BadKellerTemp BadKellerTemp
attr sensoren redingsRegex_BadKellerTemp (?s)<h4>123456789012.*?<h4>.*?<h4>(\d\d,\d)           ((123456789012= Deine SensorID))

attr sensoren readingsName_BadKellerFeuchte BadKellerFeuchte
attr sensoren readingsRegex_BadKellerFeuchte (?s)<h4>123456789012.*?<h4>.*?<h4>.*?<h4>(\d\d)          ((123456789012Deine SensorID))


Hallo,

hast Du auch einen Regensensor?
Irgendwie scheint dieser anders zu funktionieren.

In der Anzeige steht nicht die aktuelle Niederschlagsmenge des Tages sondern irgendein anderer Wert. Bisher habe ich nicht rausbekommen, welcher Wert das sein soll. In der Detailansicht kann man sich dann den Tagesverlauf anzeigen, jedoch weiß ich nicht, wie man die Daten korrekt auslesen kann, um auf die Tagesniederschlagsmenge zu kommen.
Ich habe mal 2 Screenshots der
a) Übersichtsseite der Sensoren (die Daten habe ich gerade 03.07. auf der Webseite aktualisiert, trotzdem wird der 02.07. angezeigt -> letzter Niederschlag!)
b) Detailansicht Regensensor
angehängt.

Vielleicht kann ja jemand helfen?

Viele Grüße
Jens