userReadings split Perl abschneiden eines Zeichens

Begonnen von burgi110, 07 September 2020, 19:16:16

Vorheriges Thema - Nächstes Thema

burgi110

Hilfe kenne mich mit Perl nicht aus

Ich brauche ein Userreading

Mein Versuch   userReadings    Fanspeed1 {(split(':',ReadingsVal("Sonoff_van2","state",0)))[1]}

Ergebniss: Fanspeed1     0}

Ich brauche nur die 0

Wzut

zuerst Beispiel von Sonoff_van2 state bitte ! bzw besser ein list von  Sonoff_van2
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

burgi110

es geht zwar hier nur um ein Reading splitten


DAnke für die Antwort , hier das List

Internals:
   CFGFN      /opt/fhem/mycfg/40_Schlafzimmer.cfg
   FUUID      5f538b86-f33f-8e5f-406d-5208f2fa5d719fad
   IODev      myBroker
   NAME       Sonoff_Fan_Schlafzimmer
   NR         2062
   STATE      1}
   TYPE       MQTT_DEVICE
   READINGS:
     2020-09-10 06:28:35   FanSpeed        0
     2020-09-10 06:28:41   Fanspeed1       1}
     2020-09-10 06:28:35   Heap            28
     2020-09-10 06:28:35   LoadAvg         19
     2020-09-10 06:28:35   MqttCount       1
     2020-09-10 06:28:35   POWER1          ON
     2020-09-10 06:28:31   Power           ON
     2020-09-10 06:28:35   Sleep           50
     2020-09-10 06:28:35   SleepMode       Dynamic
     2020-09-10 06:28:35   Time            2020-09-10T06:28:35
     2020-09-10 06:28:35   Uptime          0T00:00:09
     2020-09-10 06:28:35   UptimeSec       9
     2020-09-10 06:28:35   Wifi_AP         1
     2020-09-10 06:28:35   Wifi_BSSId      E8:DF:70:4C:FD:F4
     2020-09-10 06:28:35   Wifi_Channel    1
     2020-09-10 06:28:35   Wifi_Downtime   0T00:00:03
     2020-09-10 06:28:35   Wifi_LinkCount  1
     2020-09-10 06:28:35   Wifi_RSSI       66
     2020-09-10 06:28:35   Wifi_SSId       virus
     2020-09-10 06:28:35   Wifi_Signal     -67
     2020-09-10 06:28:31   lwtx            Online
     2020-09-10 06:28:41   state           {"FanSpeed":1}
     2020-09-10 06:28:35   status          {"Time":"2020-09-10T06:28:35","Uptime":"0T00:00:09","UptimeSec":9,"Heap":28,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"POWER1":"ON","FanSpeed":0,"Wifi":{"AP":1,"SSId":"virus","BSSId":"E8:DF:70:4C:FD:F4","Channel":1,"RSSI":66,"Signal":-67,"LinkCount":1,"Downtime":"0T00:00:03"}}
     2020-09-10 06:28:41   transmission-state incoming publish received
   message_ids:
   publishSets:
     :
       topic      Fan_Schlafzimmer/cmnd/FanSpeed
       values:
         1234
     speed:
       topic      Sonoff_van1/cmd/Fanspeed
       values:
   sets:
     1234       
     speed     
   subscribe:
     Fan_Schlafzimmer/+/set
     Fan_Schlafzimmer/stat/POWER1
     Fan_Schlafzimmer/tele/LWT
     Fan_Schlafzimmer/stat/RESULT
     Fan_Schlafzimmer/tele/STATE
   subscribeExpr:
     ^Fan_Schlafzimmer\/([^/]+)\/set$
     ^Fan_Schlafzimmer\/stat\/POWER1$
     ^Fan_Schlafzimmer\/tele\/LWT$
     ^Fan_Schlafzimmer\/stat\/RESULT$
     ^Fan_Schlafzimmer\/tele\/STATE$
   subscribeQos:
     Fan_Schlafzimmer/+/set
     Fan_Schlafzimmer/stat/POWER1 0
     Fan_Schlafzimmer/stat/RESULT 0
     Fan_Schlafzimmer/tele/LWT 0
     Fan_Schlafzimmer/tele/STATE 0
   subscribeReadings:
     Fan_Schlafzimmer/stat/POWER1:
       cmd       
       name       Power
     Fan_Schlafzimmer/stat/RESULT:
       cmd       
       name       state
     Fan_Schlafzimmer/tele/LWT:
       cmd       
       name       lwtx
     Fan_Schlafzimmer/tele/STATE:
       cmd       
       name       status
Attributes:
   DbLogExclude .*
   IODev      myBroker
   alexaName  Schlafzimmerventilator
   alexaRoom  Schlafzimmer
   alias      Fan_Schlafzimmer 127
   autoSubscribeReadings Fan_Schlafzimmer/+/set
   cmdIcon    1:vent_ventilation_level_1 2:vent_ventilation_level_2 3:vent_ventilation_level_3 0:vent_ventilation
   comment    iFan03
%topic%/%prefix%
192.168.2.127
   devStateIcon 0}:vent_ventilation@grey 1}:vent_ventilation_level_1@orange 2}:vent_ventilation_level_2@orange 3}:vent_ventilation_level_3@orange
   event-on-update-reading .*
   eventMap   eventMap off:off 1:1 2:2
   fp_1_Stock 172,658,7,Fan_Schlafzimmer,
   genericDeviceType Fan
   group      Schlafzimmer
   homebridgeMapping clear
model=Vallox
On=PowerState,valueOn=1,readOnly=1
RotationSpeed=FanSpeed,minValue=1,maxValue=3,cmd=FanSpeed,delay=1
   icon       vent_ventilation_control
   publishSet 1234 Fan_Schlafzimmer/cmnd/FanSpeed
   publishSet_speed Sonoff_van1/cmd/Fanspeed
   room       01_ALLE_Geraete,50_1.Stock
   stateFormat Fanspeed1
   subscribeReading_Power Fan_Schlafzimmer/stat/POWER1
   subscribeReading_lwtx Fan_Schlafzimmer/tele/LWT
   subscribeReading_state Fan_Schlafzimmer/stat/RESULT
   subscribeReading_status Fan_Schlafzimmer/tele/STATE
   userReadings Fanspeed1 {(split(':',ReadingsVal("Sonoff_Fan_Schlafzimmer","state",0)))[1]}

   userattr   Devices_1_Stock Devices_1_Stock_map Gesamte_Wohnung Gesamte_Wohnung_map st_Erdgeschoss st_Erdgeschoss_map structexclude
   verbose    0
   webCmd     0:1:2:3

Otto123

#3
Hi,

man kann das JSON Reading sicher auch einfacher umwandeln ({ json2nameValue($EVENT,'',$JSONMAP) }), aber um Deine Frage nach dem Split zu beantworten:
Vorher einfach die Klammern entfernen :)
{my $wert=ReadingsVal("Sonoff_Fan_Schlafzimmer","state",0);;$wert=~ s/[{}]//g;;(split(':',$wert))[1]}

Wenn da immer eine Zahl drin steht sollte sogar einfach ReadingsNum() anstatt ReadingsVal() gehen:
{ReadingsNum("Sonoff_Fan_Schlafzimmer","state",0)}


Bitte in Zukunft das beachten! Man kann die Beiträge auch editieren!
https://forum.fhem.de/index.php/topic,71806.0.html

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wzut

Zitat von: burgi110 am 10 September 2020, 06:34:31
es geht zwar hier nur um
das spielt keine Rolle, bitte die angepinnten Beiträge hier im Anfängerforum lesen dann wird klar das wir uns nervige Rückfragen ersparen wollen und du bitte Code Tags nutzen solltest.

Ich bin zwar kein MQTT Guru aber dein Reading state schaut furchtbar aus ... anyway , wäre es meines dann quick & dirty :
userReadings Fanspeed1:.* {ReadingsNum($name, 'state', '???')}
wobei man sich natürlich gerne noch einen sinnvolleren Trigger als .* aussuchen darf, aber das musst du mit deinem Device entscheiden.
$name macht copy & paste leichter wenn man es nochmal braucht oder man das Device mal umbenennt.
??? liefert immer einen lesbaren Wert falls dein state mal keine Zahlen enthalten sollte.

edit : da war Otto schneller .....
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher