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
zuerst Beispiel von Sonoff_van2 state bitte ! bzw besser ein list von Sonoff_van2
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
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
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 .....