Ein Device in FHEM, dass auf 2 Topics published [gelöst]

Begonnen von Master_Nick, 03 Januar 2020, 11:45:53

Vorheriges Thema - Nächstes Thema

Master_Nick

Moin :-)

Ich habe im Wohnzimmer 2 Rollos an einer Fensterfront und würde gern beide mit einem Device steuern.
Nun scheint es so, als könne man einen State nicht auf 2 Topics simultan publishen.
Oder habe ich was übersehen?

Überlege schon es nun  mit 2 unterschiedlichen publishSets zu machen und eine Eventmap zu bauen, die den State auf beide bringt. Aber da scheiter ich gerade auch dran :-D
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Master_Nick

#1
Mhhh
Mit
userReadings
pct2 { ReadingsVal("Rolladen_Couch","pct",0);; }


Wird das Reading für den anderen Rolladen zwar gesetzt aber trotz
publishSet_pct2
0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 reset reboot ota-restart homeland/haushalt/rolladen/shutter-wzr/shutter/cmd/set


Nicht ausgegeben.

Mhhh mit
pct2 {my $v = ReadingsVal("Rolladen_Couch","pct",0);; fhem("set Rolladen_Couch pct2 $v");; $v}
Kill ich gerade mein FHEM  ;D :D

Zitat2020.01.03 12:39:51 1: PERL WARNING: Deep recursion on subroutine "main::CallFn" at fhem.pl line 1899.
2020.01.03 12:39:51 1: eval: {my $v = ReadingsVal("Rolladen_Couch","pct",0);; fhem("set Rolladen_Couch pct2 $v");; $v}
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Otto123

Hi,

ich versteh nicht was Du tust. Welcher Rolladen ist welcher? Wo ist das Userreadings? Poste bitte lieber list vom Gerät als nur so Fragmente.

Du setzt im Userreadings das gleiche Reading - da würde ich auch Verrat rufen :)

Anstatt simultan zweimal zu publishen - Du kannst natürlich auf die gleiche Nachricht in 2 Geräten subscriben :) - fände ich passender.

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

Master_Nick

Huhu :-)

Also es gibt aktuell mein Device (welches 2 Devices mit publish versorgen soll):

Versucht hatte ich es nun mit    userReadings pct2 {my $v = ReadingsVal("Rolladen_Couch","pct",0);; fhem("set Rolladen_Couch $v");; $v}
Das führt aber zum absoluten Loop wie es scheint O_o.

Wenn ich beide Geräte auf ein Topic listen lasse, dann habe ich keine Möglichkeit der Einzelsteuerung mehr. Die wollte ich für eventualitäten beibehalten. Gut ich könnte nun die Firmware umschreiben, dass es einen Gruppenkanal gibt... :-D Dachte aber so kann ich Gruppen lustig in FHEM definieren.

Das Steuerdevice:
Internals:
   CHANGED   
   FUUID      5e0ea6d1-f33f-bf4c-a7f6-a478d53963b810ff
   FVERSION   10_MQTT_DEVICE.pm:0.173620/2018-09-17
   IODev      MQTT_Broker
   NAME       Rolladen_Couch
   NR         182
   STATE      0
   TYPE       MQTT_DEVICE
   qos        *:2
   retain     *:1
   READINGS:
     2020-01-03 13:28:45   online          ready
     2020-01-03 13:28:45   pct             0
     2020-01-03 13:28:45   pct2            0
     2020-01-03 13:28:45   transmission-state incoming publish received
   message_ids:
   publishSets:
     pct:
       topic      homeland/haushalt/rolladen/shutter-wzl/shutter/cmd/set
       values:
         0
         10
         20
         30
         40
         50
         60
         70
         80
         90
         100
         110
         120
         130
         140
         150
         160
         170
         180
         190
         200
         reset
         reboot
         ota-restart
     pct2:
       topic      homeland/haushalt/rolladen/shutter-wzr/shutter/cmd/set
       values:
         0
         10
         20
         30
         40
         50
         60
         70
         80
         90
         100
         110
         120
         130
         140
         150
         160
         170
         180
         190
         200
         reset
         reboot
         ota-restart
   sets:
     pct        0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,reset,reboot,ota-restart
     pct2       0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,reset,reboot,ota-restart
   subscribe:
     homeland/haushalt/rolladen/shutter-wzr/$state
     homeland/haushalt/rolladen/shutter-wzr/shutter/cmd
   subscribeExpr:
     ^homeland\/haushalt\/rolladen\/shutter-wzr\/\$state$
     ^homeland\/haushalt\/rolladen\/shutter-wzr\/shutter\/cmd$
   subscribeQos:
     homeland/haushalt/rolladen/shutter-wzr/$state 0
     homeland/haushalt/rolladen/shutter-wzr/shutter/cmd 0
   subscribeReadings:
     homeland/haushalt/rolladen/shutter-wzr/$state:
       cmd       
       name       online
     homeland/haushalt/rolladen/shutter-wzr/shutter/cmd:
       cmd       
       name       pct
Attributes:
   IODev      MQTT_Broker
   alexaName  Rolladen Arbeitszimmer
   alexaRoom  Arbeitszimmer
   devStateIcon 0:fts_window_1w 10:fts_shutter_10 20:fts_shutter_20 30:fts_shutter_30 40:fts_shutter_40 50:fts_shutter_50 60:fts_shutter_60 70:fts_shutter_70 80:fts_shutter_80 90:fts_shutter_90 100:fts_shutter_100 200:fts_shutter_100
   event-on-update-reading pct pct2
   eventMap   { usr=>{ 'auf'=>'pct 0', 'zu'=>'pct 200', '^(\d{2,3})' => 'pct $1' } }
   genericDeviceType blind
   group      Rolladen
   icon       fts_shutter
   publishSet_pct 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 reset reboot ota-restart homeland/haushalt/rolladen/shutter-wzl/shutter/cmd/set
   publishSet_pct2 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 reset reboot ota-restart homeland/haushalt/rolladen/shutter-wzr/shutter/cmd/set
   qos        2
   retain     1
   room       Echo,Rolladen,Wohnzimmer
   stateFormat pct
   subscribeReading_online homeland/haushalt/rolladen/shutter-wzr/$state
   subscribeReading_pct homeland/haushalt/rolladen/shutter-wzr/shutter/cmd
   userReadings pct2 {my $v = ReadingsVal("Rolladen_Couch","pct",0);; $v}
   webCmd     auf:10:20:30:40:50:60:70:80:90:100:110:120:130:140:150:160:170:180:190:zu



Dann gibt es einmal Rolladen Links:
Internals:
   FUUID      5e0ea68e-f33f-bf4c-8c21-3febf0a339852eca
   FVERSION   10_MQTT_DEVICE.pm:0.173620/2018-09-17
   IODev      MQTT_Broker
   NAME       Rolladen_WZL
   NR         181
   STATE      0
   TYPE       MQTT_DEVICE
   qos        *:2
   retain     *:1
   READINGS:
     2020-01-03 13:28:44   online          ready
     2020-01-03 13:28:44   pct             0
     2020-01-03 13:28:44   transmission-state incoming publish received
   message_ids:
   publishSets:
     pct:
       topic      homeland/haushalt/rolladen/shutter-wzl/shutter/cmd/set
       values:
         0
         10
         20
         30
         40
         50
         60
         70
         80
         90
         100
         110
         120
         130
         140
         150
         160
         170
         180
         190
         200
         reset
         reboot
         ota-restart
   sets:
     pct        0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,reset,reboot,ota-restart
   subscribe:
     homeland/haushalt/rolladen/shutter-wzl/$state
     homeland/haushalt/rolladen/shutter-wzl/shutter/cmd
   subscribeExpr:
     ^homeland\/haushalt\/rolladen\/shutter-wzl\/\$state$
     ^homeland\/haushalt\/rolladen\/shutter-wzl\/shutter\/cmd$
   subscribeQos:
     homeland/haushalt/rolladen/shutter-wzl/$state 0
     homeland/haushalt/rolladen/shutter-wzl/shutter/cmd 0
   subscribeReadings:
     homeland/haushalt/rolladen/shutter-wzl/$state:
       cmd       
       name       online
     homeland/haushalt/rolladen/shutter-wzl/shutter/cmd:
       cmd       
       name       pct
Attributes:
   IODev      MQTT_Broker
   alexaName  Rolladen Arbeitszimmer
   alexaRoom  Arbeitszimmer
   devStateIcon 0:fts_window_1w 10:fts_shutter_10 20:fts_shutter_20 30:fts_shutter_30 40:fts_shutter_40 50:fts_shutter_50 60:fts_shutter_60 70:fts_shutter_70 80:fts_shutter_80 90:fts_shutter_90 100:fts_shutter_100 200:fts_shutter_100
   eventMap   { usr=>{ 'auf'=>'pct 0', 'zu'=>'pct 200', '^(\d{2,3})' => 'pct $1' } }
   genericDeviceType blind
   group      Rolladen
   icon       fts_shutter
   publishSet_pct 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 reset reboot ota-restart homeland/haushalt/rolladen/shutter-wzl/shutter/cmd/set
   qos        2
   retain     1
   room       Echo,Rolladen,Wohnzimmer
   stateFormat pct
   subscribeReading_online homeland/haushalt/rolladen/shutter-wzl/$state
   subscribeReading_pct homeland/haushalt/rolladen/shutter-wzl/shutter/cmd
   webCmd     auf:10:20:30:40:50:60:70:80:90:100:110:120:130:140:150:160:170:180:190:zu


Und den Rolladen rechts:
Internals:
   FUUID      5dfe1837-f33f-bf4c-c8eb-aca5297623c07009
   FVERSION   10_MQTT_DEVICE.pm:0.173620/2018-09-17
   IODev      MQTT_Broker
   NAME       Rolladen_WZR
   NR         176
   STATE      0
   TYPE       MQTT_DEVICE
   qos        *:2
   retain     *:1
   READINGS:
     2020-01-03 13:28:45   online          ready
     2020-01-03 13:28:45   pct             0
     2020-01-03 13:28:45   transmission-state incoming publish received
   message_ids:
   publishSets:
     pct:
       topic      homeland/haushalt/rolladen/shutter-wzr/shutter/cmd/set
       values:
         0
         10
         20
         30
         40
         50
         60
         70
         80
         90
         100
         110
         120
         130
         140
         150
         160
         170
         180
         190
         200
         reset
         reboot
         ota-restart
   sets:
     pct        0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,reset,reboot,ota-restart
   subscribe:
     homeland/haushalt/rolladen/shutter-wzr/$state
     homeland/haushalt/rolladen/shutter-wzr/shutter/cmd
   subscribeExpr:
     ^homeland\/haushalt\/rolladen\/shutter-wzr\/\$state$
     ^homeland\/haushalt\/rolladen\/shutter-wzr\/shutter\/cmd$
   subscribeQos:
     homeland/haushalt/rolladen/shutter-wzr/$state 0
     homeland/haushalt/rolladen/shutter-wzr/shutter/cmd 0
   subscribeReadings:
     homeland/haushalt/rolladen/shutter-wzr/$state:
       cmd       
       name       online
     homeland/haushalt/rolladen/shutter-wzr/shutter/cmd:
       cmd       
       name       pct
Attributes:
   IODev      MQTT_Broker
   alexaName  Rolladen Arbeitszimmer
   alexaRoom  Arbeitszimmer
   devStateIcon 0:fts_window_1w 10:fts_shutter_10 20:fts_shutter_20 30:fts_shutter_30 40:fts_shutter_40 50:fts_shutter_50 60:fts_shutter_60 70:fts_shutter_70 80:fts_shutter_80 90:fts_shutter_90 100:fts_shutter_100 200:fts_shutter_100
   eventMap   { usr=>{ 'auf'=>'pct 0', 'zu'=>'pct 200', '^(\d{2,3})' => 'pct $1' } }
   genericDeviceType blind
   group      Rolladen
   icon       fts_shutter
   publishSet_pct 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 reset reboot ota-restart homeland/haushalt/rolladen/shutter-wzr/shutter/cmd/set
   qos        2
   retain     1
   room       Echo,Rolladen,Wohnzimmer
   stateFormat pct
   subscribeReading_online homeland/haushalt/rolladen/shutter-wzr/$state
   subscribeReading_pct homeland/haushalt/rolladen/shutter-wzr/shutter/cmd
   webCmd     auf:10:20:30:40:50:60:70:80:90:100:110:120:130:140:150:160:170:180:190:zu
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Master_Nick

Ach verdammt... du hast Recht :-D

Es ist viel einfacher kurz ein sub auf ein Gruppentopic zu machen was dann in jedem Gerät auf das eigene Topic das set macht :-D

Aber interessant wäre es, ob es in FEHM geht.
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Otto123

BTW: Die Kurzform wäre: ;)
userReadings pct2 {ReadingsVal($name,"pct",0)}

Aber dann ein set auf das eigene Device muss zum Loop führen, was sollte er sonst machen.  ::)
Du könntest eventuell mit setstate arbeiten, das erzeugt keinen Event. Aber den brauchst Du ja scheinbar sogar.
Oder vielleicht auch mit trigger so in der Art userReadings pct2:pct {} aber dann eben nicht pct setzen!
Aber Erfahrungsgemäß gibt es immer Besonderheiten wenn man userReadings zu so etwas mißbrauchen will. userReadings ist eben kein notify.

Ich habe keine Ahnung mit dem MQTT Device, deswegen kann ich den Gedanken mit dem publishen nicht wirklich verstehen  :-[

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

Beta-User

Das mit dem Gruppentopic macht dann Sinn, wenn man immer identische Stände hat und haben soll. Würde aber wetten, dass das nicht zu 100% garantiert sein wird, und wenn es "nur" wg. Beschattung usw. ist.
Alternative:  structure?
(Das bißchen mehr an MQTT-Verkehr sollte keine Probleme machen).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Master_Nick

Ich habe mich dazu aufgerafft, den von Homie ( https://github.com/homieiot/homie-esp8266/tree/v3.0 ) bereitgestellten Broadcast mal zu nutzen.
Bin auch schon gut weit, so das ich das nachher in alle Rolladen integrieren kann und dann einfach ne freie Menge an Geräten auf eine Position setzen kann :-)

Structure wäre auch gegangen - so bin ich nun aber noch flexibler kann jedem Gerät sagen auf Gruppe 9 reagiert ihr alle und bei 2 nur ihr beiden und bei 3 ihr vier Geräte... etc :-)
Per MQTT kommt da dann "9|110" - das erste ist die Gruppe das zweite die anzufahrende Position.

Ich danke euch für Ideen und Hilfe :-)
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Master_Nick

Zitat von: Otto123 am 03 Januar 2020, 16:47:25
BTW: Die Kurzform wäre: ;)
userReadings pct2 {ReadingsVal($name,"pct",0)}

Gruß Otto

Kann ich da irgendwie noch Zeichen einschleusen ? :-D
Müsste vor dem wert aus pct noch "1|" haben :-)
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

OdfFhem

@Master_Nick

Angenommen, ich habe die Frage verstanden, dann probier mal

userReadings pct2 { "1|".ReadingsVal($name,"pct",0) }



Master_Nick

Perfekt!  8) Genau das meinte ich.

Habe aber natürlich wieder nicht bedacht, dass das userreading beim setzen kein Event erzeugt. Entweder bastel ich da nun ein Doif oder es geht mittels eines weiteren userreading:

pcttemp {my $v = "1|".ReadingsVal("Rolladen_Couch","pct",0);; fhem("set Rolladen_Couch pct2 $v");; $v}

Also erst pcttemp aus pct triggern und als befehl pct2 setzen.... scheint aber wieder nen Loop zu ergeben (verstehen tu ich das gerade nicht).
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Otto123

#11
Wir drehen uns im Kreis :o

Nochmal ganz deutlich - in Kurzform: das hier "fhem("set Rolladen_Couch pct2 $v")" in einem userReadings -> ist Sch...

Mach für sowas ein notify!!!

Und ein völlig unspezifischer Trigger "pcttemp" ohne etwas :dahinter ist auch meist auch nicht optimal
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

Master_Nick

#12
 ;D ;D

Hihi.

Ist ja gut :-D

Ich baue lieber DOIFs - allterdings bin ich mir gerade unklar, ob da ein DOIF das tun kann was ein Notify von Haus aus kann.... scheitert schon beim "Reagiere auf Änderung bei Device "Rolladen_Couch"" :-D
Ich dachte immer das Notify ist abgelöst vom DOIF.


([Rolladen_Couch:pct]) (set Rolladen_Couch broadcast 1|[Rolladen_Couch:pct])

Das set geht schon mal.... aber die Bedingung löst nicht aus :-D
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)

Otto123

Zitat von: Master_Nick am 04 Januar 2020, 12:41:50
Ich dachte immer das Notify ist abgelöst vom DOIF.
Oh je  :o
Ich sehe es eher so: DOIF entwickelt sich zum parallel Universum ;)

Wie Du es machst ist egal, aber versuch die Dinge zu verstehen und nicht nach Belieben zu verbiegen :)
Natürlich kann ein DOIF das was notify auch kann, die Frage ist wie gut oder wie einfach und mit welchem Syntax  ;D

Und auch mit notify oder DOIF kann man Schleifen bauen ;)
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

Master_Nick

#14
Mhh weiß jemand wie ich mittels DOIF auf die "Änderung" eines spezifischen Readings eines devices reagiere`(Bedingunsteil)? Ohne, dass ich sage es muss ungleich, gleich, größer, kleiner, etc... sein :-D ?


*EDIT* Oh... sehe gerade ich bekomme kein Event durch mein Device - spooky O_o dabei ist es ein normales MQTT Device.


Ach du schande... ich hatte ein event on ... definiert irgendwann mal....

ERLEDIGT geht alles :-D DANKE EUCH!
Rancher K8s Cluster mit nanoCUL (a-culfw) | IObroker | IT(V1&V3), IT-PIR, THGR122NX |Co² | alexa-fhem | WOL | NFC | Harmony UltimateHub | Anwesenheitserkennnung | Roomba | 10" Touch mit Node-Red | SonOff S20 | SonOff Touch | SonOff Dual | Rolladen | Und ganz viel anderes tolles Gerödel.... ;-)