Temperatursensor: HM-WDS30-T-O und openhab

00 e0 ist der aktuelle Temperaturwert.

Ist der aktuelle Temperaturwert im Hexadezimal Format. (division durch 10 um die Dezimalstelle rein zu rücken)

somit: 00E0 ==> 22,4°C

Ok, das war dann zu einfach :wink: :thumbsup:
Hex war klar, nur das /10 hatte ich ohne den ersten Kaffe noch nicht hinbekommen… :smiley:

Ja, kann man. Und zwar mit Inline-PHP-Skripts:

rc print($hg->getValue(2, 1, "TEMPERATURE"));

rc steht für “run command”, danach folgt dann der PHP-Befehl. “$hg” ist das bereits vorinstanziierte Homegear-Objekt.

Viele Grüße

Sathya

1 Like

Hi Sathya,

der Befehl funktioniert von Homegear command aus.
1.) homegear -r
2.) rc print($hg->getValue(2, 1, “TEMPERATURE”));

Gibt es auch eine Möglichkeit direkt von der Linux command line aus den Wert auszulesen?

Ziel ist es per (Shell) Script den Wert auszulesen.

Ich dachte an:

homegear -r | rc print($hg->getValue(2, 1, “TEMPERATURE”));

Vielen Dank

A post was split to a new topic: Aktualität der Werte in OH

Du suchst homegear -e :slight_smile:
Oder du kannst einfach ein kleines PHP-Script schreiben und das über homegear ausführen: https://homegear.eu/index.php/Homegear_Reference#Homegear_Scripts

root@homegearpi:/home/pi# homegear -h
Usage: homegear [OPTIONS]

Option              Meaning
-h                  Show this help
-u                  Run as user
-g                  Run as group
-c <path>           Specify path to config file
-d                  Run as daemon
-p <pid path>       Specify path to process id file
-s <user> <group>   Set GPIO settings and necessary permissions for all defined physical devices
-r                  Connect to Homegear on this machine
-e <command>        Execute CLI command
-o <input> <output> Convert old device description file into new format.
-l                  Checks the lifeticks of all components. Exit code "0" means everything is ok.
-v                  Print program version

Vielen Dank!
So etwas habe ich gesucht.

Nun mein letztes Problem (hoffentlich): :innocent:
Ich zeichne den Sensor auf und stelle die Temperatur dann in einem Chart dar. Leider gibt es Unregelmäßigkeiten im HomeGear die ich mir nicht erklären kann. Das Aufzeichnungen funktioniert mal und dann wieder nicht. “Die Werte frieren ein”

zusätzliche Information:

Ist das eine Limitierung von HM/HG ?

Kannst du sicher stellen, dass dein Sensor zur Zeit wo nicht gemeldet wird nicht UNREACH ist? Weil steht in deinem Screenshot beides auf 1…

Es gibt keine Limitierung der Werthäufigkeit in Homegear. Und wie du auch an deinem Graph siehst, gibt homegear immer einen Wert zurück. Der ändert sich nur eben nicht weil homegear keinen Wert mehr vom Gerät seit LAST_PACKET_RECEIVED erhalten hat. Was meine These mit dem UNREACH stützt :wink:

Ich sage du hast ein Empfangsproblem auf Homematicseite.

Ok - Ich werde den Sensor zur Einheit (2m) dazuschieben und wieder berichten

Update:

Ich habe in der Aufzeichnung noch “gefrorene” Werte. Leider bin ich mir nicht sicher ob das ein Problem von HG ist.

Besser wäre es (meiner Meinung) wenn Homegear bei nicht gültigen Werten einen Error rein schreiben würde. Somit kann ein fehlerhaftes Lesen erkannt werden.

Naja, es gilt ja immer der “letzte” Wert. Wenn nichts gesendet wird, kann ja das nicht als Fehler erkannt werden.

Was sagt config print (UNREACH) zu der Zeit wo keine Werte aktualisiert werden?

Was sagt config print (UNREACH) zu der Zeit wo keine Werte aktualisiert werden?

Leider kann ich dir diese Frage nicht beantworten, da ich immer erst Stunden/Tage danach drauf komme.
Ich muss mir da ein Script überlegen das diesen Parameter abfragt und in die DB mitschreibt.

:thumbsup:

Vielleicht kann @sathya was dazu sagen. Aber wenn es nicht UNREACH ist, würde ich sagen “works as designed”.

It works as designed :slight_smile:
… nur das sollte man im Design überlegen.

Für Temperaturen sollte man sich über einen Wert in klaren sein ob der Wert “echt” oder schon Stunde alt ist.
Meist hängen davon weitere (wichtige) Aktionen ab.

Vorschlag an @sathya:
Sollte der Wert nicht aktuell sein, könnte der Error Code in die bestehende Spalte hinzugefügt werden.
Somit würde im Fehlerfall eindeutig erkennbar sein ob es sich um einen Wert in der Vergangenheit handelt

Update: Ich habe nun das logging einige Tage beobachtet.
Leider gibt es immer wieder Aussetzte. Die Aussetzer wären nicht schlimm wenn man die als Aussetzer erkennen würde.
Vielleicht kann man die “falschen” Werte in Zukunft mit HG intelligent abfangen.

P.S. der Beitrag kann geschlossen werden :slight_smile:
Vielen Dank

Hallo @kohle,

mich wundert, dass die Aussetzer überhaupt existieren. Ich habe bei mir einige Temperatursensoren (in Form von Wandthermostaten) im Einsatz, welche zuverlässig alle 2 bis 3 Minuten einen Wert senden. Könntest du mir einmal ein Log posten, in welchem der Übergang in einen Bereich vorhanden ist, in dem Werte nicht mehr aktualisiert werden? Vielleicht gibt das etwas Aufschluss.

Was meinst du damit genau? In welche Spalte? Natürlich könnte man bei “UNREACH” die Temperatur zum Beispiel auf “0” setzen. Ansonsten gibt es ja das “UNREACH” und “LAST_PACKET_RECEIVED” als Fehlerindikator.

Viele Grüße

Sathya

Hallo @sathya

Die Aussetzer passieren immer wieder. Ich beobachte das seit Wochen. Ich kann mir nur “?schwer?” vorstellen das es mit dem Empfang zu tun hat. Da Sender und Empfänger ca. 5m voneinander entfernt sind.

Ich würde Euch hier gerne meine Logs zu Verfügung stellen doch weiß ich nicht wie ich das machen sollte. (ich bin keine Programmierer) – Sorry – nur ein Stümper :joy:

Ich dachte da an einen aufruf von crontab jede minute mit:

homegear -r | rc print($hg->getValue(2, 1, “UNREACH”));

Leider funktioniert das so NICHT! ist nur ein beispiel wie ich versuche an die Variable ran zu kommen.

Hat von euch jemand einen Vorschlag wie ich die Log mit den benötigten Daten zu Verfügung stellen kann ?
lg

Ich würde ein Null bevorzugen anstatt den Letzten Wert zu halten. Weiteres würde ich im Fall eines fehlerhaften lesen ein erneutes lesen Vorschlagen. Erst wenn beim x ten mal lesen kein “echter gültiger” Wert eingelesen werden kann würde ich deine vorgeschlagene 0 schreiben.

Ich finde das mit 0 eine smarte Idee. Vielleicht kann man anstatt 0 ein Sonderzeichen verwenden um mit einer nachgeschalteten Aktion (muss nicht in HG abgebildet sein) den Fehler via Mail mitzuteilen.

Die Werte werden nicht gelesen. Das Gerät sendet diese von sich aus. Von daher ist ein erneutes Lesen nicht möglich.

Das geht nicht, da der Datentyp sich nicht ohne Weiteres ändern kann. Wir müssen also bei Fließkommazahlen bleiben.

Das müsste heißen:

homegear rc 'print($hg->getValue(2, 1, "UNREACH));'

Damit bekommst du allerdings nur den letzten Wert. Poste am besten die gesamte Datei “/var/log/homegear/homegear.log” und schreibe dazu, wann es Aussetzer gab.

Viele Grüße

Sathya