Itemwert spliten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
lenschith
Beiträge: 314
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: Itemwert spliten

Beitrag von lenschith »

Wenn ich einen SNMP Walk mache auf die OID 1.3.6.1.4.1.5127.1.1.1.8.1.7.0 kommt das als Antwort:

Code: Alles auswählen

 "Centigrade:48 	Fahrenheit:118" [ASN_OCTET_STR]

16.12.2020 14:12:49 (6 ms) : SNMP v2c
16.12.2020 14:12:49 (10 ms) : Custom OID 1.3.6.1.4.1.5127.1.1.1.8.1.7.0
16.12.2020 14:12:49 (133 ms) : SNMP Datatype: ASN_OCTET_STR
16.12.2020 14:12:49 (145 ms) : -------
16.12.2020 14:12:49 (155 ms) : Value: Centigrade:49 Fahrenheit:120
16.12.2020 14:12:49 (210 ms) : Done
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

Benutzeravatar
peter-pan
Beiträge: 2769
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Itemwert spliten

Beitrag von peter-pan »

Sorry, aber das sagt mir eigentlich nichts(oder besser nichts genaues). Wie sieht denn der Inhalt(Status) deines Items

Code: Alles auswählen

String   Wdmycloudtemperatur        "System Temperatur [%d °C]"        {channel="snmp:target:MyCloud:wdmycloudtemperatur"}
aus ?

Der Wert sollte eigentlich hier

Code: Alles auswählen

    val str = snmpString.state.toString
    logInfo("snmpstring","String: {}",str)
im Logger(frontail) ausgegeben werden !!!
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Benutzeravatar
lenschith
Beiträge: 314
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: Itemwert spliten

Beitrag von lenschith »

Bitte steinige mich nicht, aber wie komme ich an Logfiles?
Screenshot 2020-12-16 170635.png
Ich werd da nicht schlau auch wenn ich das google. Was muss ich tun um an Logfiles zu kommen?

oder meinst du über die CLI? Hier bekomme ich bei einer Änderung diesen Output.

Code: Alles auswählen

root@openhab:/openhab/userdata/logs# tail -f events.log | grep Wdmycloud*
2020-12-16 21:09:58.906 [vent.ItemStateChangedEvent] - Wdmycloudtemperatur changed from Centigrade:50   Fahrenheit:122 to Centigrade:49   Fahrenheit:120
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

Benutzeravatar
peter-pan
Beiträge: 2769
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Itemwert spliten

Beitrag von peter-pan »

lenschith hat geschrieben: 16. Dez 2020 16:21 Bitte steinige mich nicht, aber wie komme ich an Logfiles?
...nieeee. Ich helfe gerne, wenn ich kann. :)
Wenn du Frontail nicht installiert hast, kannst du in einem Shell-Fenster den "openhab-cli"-Logger mit laufen lassen. Dazu gibst du einfach:

Code: Alles auswählen

[22:07:51] openhabian@openHABPi:~$ openhab-cli showlogs
ein. Oder direkt per tail:

Code: Alles auswählen

tail -f /var/log/openhab2/openhab.log /var/log/openhab2/events.log

Das sieht dann etwa so aus:

Code: Alles auswählen

==> /var/log/openhab2/openhab.log <==
2020-12-16 22:25:32.546 [INFO ] [se.smarthome.model.script.snmpstring] - String - str: Centigrade:45   Fahrenheit:120
2020-12-16 22:25:32.549 [INFO ] [se.smarthome.model.script.snmpstring] - Celsius (String str2): 45  
2020-12-16 22:25:32.551 [INFO ] [se.smarthome.model.script.snmpstring] - Celsius (Number - num): 45.0
==> /var/log/openhab2/events.log <==
2020-12-16 22:25:32.554 [vent.ItemStateChangedEvent] - WdmycloudtemperaturCelsius changed from 49.0 to 45.0
Ein Teil der Daten ist aus "openhab.log" und der andere Teil aus "events.log". Das wird wahrscheinlich auch der Grund sein warum du nur Teile der geloggten Daten siehst da ein Teil in "openhab.log" steht.
testtemp.jpg
Bitte wundere dich nicht, wegen der unterschiedlichen Temperaturen (45.0 bzw. 49.0). Da hab ich zwischen den Screenshots einfach ein bisschen mit den Werten "gespielt".

Aber wenn ich mir jetzt deinen "grep" genauer anschaue, sehe ich, dass "WdmycloudtemperaturCelsius" nicht gefunden wurde!!! Das ist allerdings merkwürdig. Deshalb noch mal eine kleine Ergänzung in der Regel(eine logInfo mehr):

Code: Alles auswählen

rule "snmp String nach number"
when
    Item Dummy_4 changed to ON
then
//    val snmpString ="Centigrade:49 Fahrenheit:120"
    val snmpString ="Centigrade:49   Fahrenheit:120"
    val str = snmpString.toString
    logInfo("snmpstring","String - str: {}",str)
    val str2 = transform("REGEX",".*:(.*) .*",str)
    logInfo("snmpstring","Celsius (String str2): {}",str2)
    val num = Float::parseFloat(str2)
    logInfo("snmpstring","Celsius (Number - num): {}",num)
    WdmycloudtemperaturCelsius.postUpdate(num)
    logInfo("snmpstring","Celsius (Celsius): {}",WdmycloudtemperaturCelsius)    
end
Diese zusätzliche Log-Zeile sollte dann so aussehen:

Code: Alles auswählen

2020-12-16 23:07:05.716 [INFO ] [se.smarthome.model.script.snmpstring] - Celsius (Celsius): WdmycloudtemperaturCelsius (Type=NumberItem, State=49.0, Label=System Temperatur, Category=null)
Bitte beachte auch, dass meine Dateien evtl. in anderen Ordner liegen als bei dir, da ich die "einfache" Installation vom SD-Karten-Image habe.

Vielleicht hilft uns das weiter.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Benutzeravatar
lenschith
Beiträge: 314
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: Itemwert spliten

Beitrag von lenschith »

Dank für die Hilfe.

Ich war gestern noch fleißig und habe den Frontail installiert. Heute morgen habe ich das Script noch mit deiner Zeiler ergänzt.
Aber leider ohne Erfolg. Im Log kommt hier nichts an.

Code: Alles auswählen

2020-12-17 06:07:57.868 [vent.ItemStateChangedEvent] - Wdmycloudtemperatur changed from Centigrade:38 	Fahrenheit:100 to Centigrade:39 	Fahrenheit:102

2020-12-17 06:08:58.300 [vent.ItemStateChangedEvent] - Wdmycloudtemperatur changed from Centigrade:39 	Fahrenheit:102 to Centigrade:40 	Fahrenheit:104
Bei Änderung des Items Wdmycloudtemperatur folgen keine weiteren Logeinträge mehr.

Aber auch wenn ich die Werte wie du eintrage, bekomme ich kein Ergebins. Habe ich irgendwo einen Fehler warum das so nicht klappt?

Code: Alles auswählen

String   Dummy_4        "System Temperatur [%.1f°C]" 

Code: Alles auswählen

rule "snmp String nach number"
when
    Item Dummy_4 changed to ON
then
//    val snmpString ="Centigrade:49 Fahrenheit:120"
    val snmpString ="Centigrade:49  Fahrenheit:120"
    val str = snmpString.toString
    logInfo("snmpstring","String - str: {}",str)
    val str2 = transform("REGEX",".*:(.*) .*",str)
    logInfo("snmpstring","Celsius (String str2): {}",str2)
    val num = Float::parseFloat(str2)
    logInfo("snmpstring","Celsius (Number - num): {}",num)
    WdmycloudtemperaturCelsius.postUpdate(num)
    logInfo("snmpstring","Celsius (Celsius): {}",WdmycloudtemperaturCelsius)    
end
Oder mache ich hier auch was falsch?
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Itemwert spliten

Beitrag von udo1toni »

Das Problem ist, das es sich eben nicht um ein Leerzeichen handelt, der REGEX aber ein Leerzeichen zur Erkennung nutzt. Ändere bitte diese Zeile:

Code: Alles auswählen

val str2 = transform("REGEX",".*:(.*) .*",str)
zu

Code: Alles auswählen

val str2 = transform("REGEX",".*:(.*)\t.*",str)
Falls das nicht funktioniert, kannst Du noch doppeltes escapen probieren:

Code: Alles auswählen

val str2 = transform("REGEX",".*:(.*)\\t.*",str)
Wenn das immer noch nicht hilft, wäre

Code: Alles auswählen

val str2 = transform("REGEX",".*:(.*).Fa.*",str)
noch eine Möglichkeit (der . bedeutet "ein beliebiges Zeichen", in diesem Fall also das Zeichen vor dem Buchstaben F)
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
lenschith
Beiträge: 314
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: Itemwert spliten

Beitrag von lenschith »

Ich habe alle 3 Varianten getestet aber es ändert sich nichts am Verhalten.
Im Logging kommt auch keine Meldung.
Screenshot 2020-12-17 075635.png
Screenshot 2020-12-17 075842.png
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

Benutzeravatar
udo1toni
Beiträge: 15265
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: Itemwert spliten

Beitrag von udo1toni »

Und die vierte Variante?

Code: Alles auswählen

val str2 = transform("REGEX",".*:(.*).Fa.*",str)
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
lenschith
Beiträge: 314
Registriert: 11. Dez 2020 22:36
Answers: 0

Re: Itemwert spliten

Beitrag von lenschith »

selbes Verhalten, die ist gerade aktiv. Es taucht im Log nichts auf
openHAB4.3.3 in einem Docker Container auf RPI5-8GB, AVM: Fritz!Box 7590 - SMART301/302 - Comet, SMART200/210, SMART440, Alexa, Shelly, Tasmota, ESP Easy, WLED

Benutzeravatar
peter-pan
Beiträge: 2769
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Itemwert spliten

Beitrag von peter-pan »

udo1toni hat geschrieben: 17. Dez 2020 07:32 Das Problem ist, das es sich eben nicht um ein Leerzeichen handelt, der REGEX aber ein Leerzeichen zur Erkennung nutzt
Ich hatte auch erst die Vermutung von Udo, aber ich hab das dann bei mir getestet und die erste Variante von Udo funktioniert auch bei mir, wenn mehrere Leerzeichen vorhanden sind.
Was mich aber wundert ist, dass der Update nicht funktionieren soll. Du schaust auch immer nur in der "events.log". Bitte schau mal in der openhab.log nach, nachdem die Rule ausgeführt wurde:

Code: Alles auswählen

[08:48:19] openhabian@openHABPi:~$ cd $OPENHAB_LOGDIR
[08:49:01] openhabian@openHABPi:/var/log/openhab2$ ls -alF
insgesamt 129912
drwxrwxr-x+ 2 openhab openhab     4096 Dez 17 00:10 ./
drwxr-xr-x  9 root    root        4096 Dez 17 00:00 ../
-rw-rw-r--  1 openhab openhab        0 Nov  1  2019 audit.log
-rw-rw-r--  1 openhab openhab  4267638 Dez 16 22:33 events.log
-rw-rw-r--  1 openhab openhab 10785917 Dez 17 08:49 openhab.log
-rw-rw-r--  1 openhab openhab 16848893 Dez 16 23:36 openhab.log.1
-rw-rw-r--  1 openhab openhab 16807845 Dez 17 00:08 openhab.log.2
-rw-rw-r--  1 openhab openhab 16864107 Dez 17 00:08 openhab.log.3
-rw-rw-r--  1 openhab openhab 16853476 Dez 17 00:08 openhab.log.4
-rw-rw-r--  1 openhab openhab 16842970 Dez 17 00:08 openhab.log.5
-rw-rw-r--  1 openhab openhab 16843501 Dez 17 00:09 openhab.log.6
-rw-rw-r--  1 openhab openhab 16880594 Dez 17 00:10 openhab.log.7
-rwxr-xr-x  1 openhab openhab        0 Dez 13 19:14 Readme.txt*
[08:51:04] openhabian@openHABPi:/var/log/openhab2$ cat openhab.log |grep -i snmpstring
2020-12-17 08:51:43.299 [INFO ] [se.smarthome.model.script.snmpstring] - String - str: Centigrade:49   Fahrenheit:120
2020-12-17 08:51:43.303 [INFO ] [se.smarthome.model.script.snmpstring] - Celsius (String str2): 49
2020-12-17 08:51:43.305 [INFO ] [se.smarthome.model.script.snmpstring] - Celsius (Number - num): 49.0
2020-12-17 08:51:43.307 [INFO ] [se.smarthome.model.script.snmpstring] - Celsius (Celsius): WdmycloudtemperaturCelsius (Type=NumberItem, State=NULL, Label=System Temperatur, Category=null)
[08:52:04] openhabian@openHABPi:/var/log/openhab2$
Dort sollten dann die Logs der Rule erscheinen, wie in den Codefences (cat openhab.log |grep -i snmpstring)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

Antworten