[gelöst] Schaltzustand Dummy Device auch per Rückmeldungsobjekt ändern

Begonnen von NehCoy, 21 Juli 2019, 13:54:12

Vorheriges Thema - Nächstes Thema

NehCoy

Hallo!

Über mehrere Dummy Devices realisiere ich gerade ein kleine Automatisierung.
Falls man allerding in der Zwischenzeit manuell (per Schalter) das Gerät  ausschaltet, bleibt das Dummy Device jedoch eingeschaltet.
Kann man den Schaltzustand eines Dummy Devices auch per Rückmeldungobject (KNX) ändern?

Danke & Grüße
NehCoy

MadMax-FHEM

Wozu denn überhaupt den Dummy!?

Erleuchte doch ein wenig ;)

Ansonsten: Notify auf "KNX ändert sich" -> set Dummy off (vorher entweder prüfen auf "Zustand KNX ist off" oder eben das RegEx des Notify entsprechend)

Evtl. generell statt Dummy vielleicht readingsProxy...

Aber ohne Ahnung was du tust/tun willst etc. -> viel "Raterei"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

NehCoy

Hallo Joachim,

danke für deinen ersten Bersuch.
Es ist nicht so leicht die Erleuchtung zu bringen, wenn bei einem selbst ganz schon dunkel ist.  :P
Es geht um eine Schaltsequenz, die durch Dummies getriggert wird.
Ein Notify auf die Dummy Devices erstellt dann die die at-Befehle zum verzögerten einschalten.
Dummies sind die Ventile für die Bewässerung. Zuerst wird jedoch die Pumpe eingeschaltet, dass diese Druck aufbauen kann.
Die Pumpe/Ventile lassen sich natürlich auch ganz normal per KNX schalten, das bekommen dann aber die Dummy-Devices nicht mit.

Bei dem notify auf den KNX Aktor wollte ich das clever lösen und mit Python aus dem KNX-Gerätenamen den dummy-Gerätenamen erzeugen, damit ich nicht für jedes Ventil ein notify anlegen muss.
Das sieht dann so aus:
sub
BewaesserungMapping_Rueck($$)
{
  my ($SENDER,$EVENT) =  @_;
  my $dummyDevice =  $SENDER.replace("knx", "dy");
  fhem "set $dummyDevice $EVENT";
}


Das Notify auf die KNX-Aktoren ist wie folgt definiert:
define ntfy.Bewaesserung.Rueckmeldung notify knx..* {BewaesserungMapping_Rueck($NAME, $EVENT)}
(KNX Gerätename z.b. "knx.Bewaesserung.Sprenger.Sued", dummy entsprechend "dy.Bewaesserung.Sprenger.Sued")

Danke & Grüße
NehCoy

MadMax-FHEM

Hmm wird schwierig ;)

Aber ich mach mal weiter...

Sind die KNX-Aktoren in fhem integriert?
Wenn nicht: warum nicht!? ;)


Was willst du mit:

fhem "set $dummyDevice $EVENT";

erreichen?

Ich nehme an das Notify triggern...
...das ginge mittels "trigger".

Bei deinem set-Befehl wird bestimmt auch ein Event erzeugt (setzt u.a. aber ein setList voraus sonst, hmmm), evtl. mal im EventMonitor schauen was dabei kommt...
...dort kannst du auch passende Notify erzeugen lassen!

Die funktionieren dann auch ;)

Ansonsten: schon mal bei readingsProxy geschaut (wobei ich bei deinem [komplizierten] Konstrukt nicht sicher bin, ob das hilft)...

Poste doch mal was du bislang hast, damit ich (und andere) mal sehen können was du schon hast und evtl. auch besser sehen was wie zusammenhängt/gesteuert wird...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

NehCoy

Zitat von: MadMax-FHEM am 21 Juli 2019, 15:11:01Sind die KNX-Aktoren in fhem integriert?
Natürlich, sonst könnte ich ja doch kein Notify darauf realisieren.
Auslösen tut das Notify, wenn ich den Aktor direkt schalte (Datum/Uhrzeit im Attribute state ändern sich).

Zitat von: MadMax-FHEM am 21 Juli 2019, 15:11:01Was willst du mit:
[fhem "set $dummyDevice $EVENT";
erreichen?
Ich nehme an das Notify triggern...
...das ginge mittels "trigger".
Nein! - Den Zustand (on/off) des Dummies setzen.
Wenn Aktor manuell geschaltet wird, soll der dazugehörige Dummy den selben zustand haben.

Zitat von: MadMax-FHEM am 21 Juli 2019, 15:11:01Bei deinem set-Befehl wird bestimmt auch ein Event erzeugt (setzt u.a. aber ein setList voraus sonst, hmmm), evtl. mal im EventMonitor schauen was dabei kommt...
...dort kannst du auch passende Notify erzeugen lassen!

Die funktionieren dann auch ;)
Wie gesagt, dass notify funktioniert an sich. Nur das Pythonskript wird nicht richtig ausgeführt.
Habe jetzt testweise den Schaltbefehlt (set) durch ein "define ... at ..." ersetzt.
Dieses testgerät wird auch nicht angelegt ...  :o

Zitat von: MadMax-FHEM am 21 Juli 2019, 15:11:01Ansonsten: schon mal bei readingsProxy geschaut (wobei ich bei deinem [komplizierten] Konstrukt nicht sicher bin, ob das hilft)...
Nein, habe ich nicht. Liest sich aber gerade auch nicht so, als ob es mir hilft.

Zitat von: MadMax-FHEM am 21 Juli 2019, 15:11:01Poste doch mal was du bislang hast, damit ich (und andere) mal sehen können was du schon hast und evtl. auch besser sehen was wie zusammenhängt/gesteuert wird...
Diese Automatisierung habe ich letztes Jahr durch Hilfe der Community umgesetzt: https://forum.fhem.de/index.php/topic,90120.msg833921.html#msg833921
Struktur:
define struct.PumpenAutomatik structure PumpenAutomatik dy.Bewaesserung.Wasserhahn dy.Bewaesserung.Sprenger.Sued dy.Bewaesserung.Sprenger.Nord dy.Bewaesserung.Tropfbewaesserung.Gemuesegarten dy.Bewaesserung.Tropfbewaesserung.Hochbeete dy.Bewaesserung.Tropfbewaesserung.Randbeete dy.Bewaesserung.Tropfbewaesserung.Vorgarten
setuuid struct.PumpenAutomatik 5c75af94-f33f-a1f4-5bc9-22f27db4aa4e841c
attr struct.PumpenAutomatik DbLogExclude .*
attr struct.PumpenAutomatik clientstate_behavior relative
attr struct.PumpenAutomatik clientstate_priority on|On|on off|Off|off
attr struct.PumpenAutomatik devStateIcon on:10px-kreis-gruen off:10px-kreis-rot
attr struct.PumpenAutomatik room Automatik
attr struct.PumpenAutomatik webCmd :

Watchdog (exemplarisch):
define watchdog.Bewaesserung.Wasserhahn watchdog dy.Bewaesserung.Wasserhahn:on 02:00:00 dy.Bewaesserung.Wasserhahn:off set dy.Bewaesserung.Wasserhahn off;; trigger watchdog.Bewaesserung.Wasserhahn .
setuuid watchdog.Bewaesserung.Wasserhahn 5c75af95-f33f-a1f4-0c04-63e28a6db3599d8b
attr watchdog.Bewaesserung.Wasserhahn DbLogExclude .*
attr watchdog.Bewaesserung.Wasserhahn room Automatik


Notify (exemplarisch):
define ntfy.Bewaesserung.Tropfbewaesserung.Hochbeete notify dy.Bewaesserung.Tropfbewaesserung.Hochbeete {BewaesserungMapping("knx.Bewaesserung.Tropfbewaesserung.Hochbeete", $EVENT)}
setuuid ntfy.Tropfbewaesserung.Hochbeete 5c75af95-f33f-a1f4-141d-38c3bbb898448891
attr ntfy.Bewaesserung.Tropfbewaesserung.Hochbeete DbLogExclude .*
attr ntfy.Bewaesserung.Tropfbewaesserung.Hochbeete room Automatik


und der Rest von oben

MadMax-FHEM

Äh, wenn du mit Python-Script das Perl-Script hier meinst ;)  :

Zitat
sub
BewaesserungMapping_Rueck($$)
{
  my ($SENDER,$EVENT) =  @_;
  my $dummyDevice =  $SENDER.replace("knx", "dy");
  fhem "set $dummyDevice $EVENT";
}

Dann bau doch mal Logausgaben ein:

Also mal so:


sub
BewaesserungMapping_Rueck($$)
{
  my ($SENDER,$EVENT) =  @_;

  Log3(undef,3,"BewaesserungMapping_Rueck     Sender: $SENDER   Event: $EVENT");

  my $dummyDevice =  $SENDER.replace("knx", "dy");

  Log3(undef,3,"BewaesserungMapping_Rueck     dummyDevice: $dummyDevice");

  fhem "set $dummyDevice $EVENT";
}


Damit du siehst was überhaupt "gemacht wird" ;)

Wenn in $dummyDevice das korrekte Dummy-Device steht (und im Log ausgegeben wird) und auch im $EVENT das korrekte/erwartete steht ("nur" der Zustand also on/off), dann sollte das mit dem:


fhem "set $dummyDevice $EVENT"


schon passen...

Also wenn das die Problematik ist!?

(weil so ganz bin ich irgendwie noch nicht "bei dir" ;)  )

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

NehCoy

Wenn man die Log-Funktion richtig benutzt kommt auch was raus ;)
Das Problem saß streng genommen wieder zwischen Tastatur und Stuhllehne.
$SENDER.replace("knx", "dy");
ist wirklich Python-Code.
Bei Perl sieht das ganze anders aus:
my $dummyDevice = $SENDER;
  substr($dummyDevice, 0, 12) = "dy"; 

siehe https://caveofprogramming.com/perl-tutorial/perl-replace-substring.html

So funktioniert es auch! ;-)

Danke.

MadMax-FHEM

Na dann: gratuliere! :)

Kannst ja noch ein [gelöst] vor den ersten Post hängen und gut is...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

crazysky

hey,

das ist ja wunderbar dass es eine Lösung gab.
Ich hatte praktisch dieselbe Frage gestellt, allerdings ging es dabei um das auslesen einer url via httpmod. Leider hat mir niemand geantwortet obwohl ich das thema sehr schon illustriert hatte.
Vielleicht haben die Helfer hier ja meinen Beitrag vor kurzem nicht gesehen und können auch mir Unterstützung geben. Daher hier noch einmal in zuversichtlicher Hoffnung der Direktlink:
https://forum.fhem.de/index.php/topic,102327.msg958767.html#msg958767

Liebe Grüße
Sven

MadMax-FHEM

Habwn bestimmt einige gesehen.
Hab ihn ja auch gesehen...
Aber musst du leider warten, bis jemand eine Idee hat...

Threads kapern ist nicht die Lösung... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)