DOIF erst schalten nach Zeit und Schwellwert überschreitung

Begonnen von ChrisA4, 15 September 2022, 14:15:35

Vorheriges Thema - Nächstes Thema

ChrisA4

Zitat von: DetlefR am 19 September 2022, 14:57:42
Sorry. ??? Mein Fehler. Setextension ist bei Readingsproxy von Hause aus mit drin.
Es sollten
blink
...
on
off
on-for-timer
...toggle
zur Verfügung stehen.
Schalten und Rückmeldung funktioniert darüber?
Wenn nicht schick mal das Ergebnis von
list -r Heizstab_Relais_1

define Heizstab_Relais_1 readingsProxy MQTT2_4fach:POWER1

setstate Heizstab_Relais_1 off
setstate Heizstab_Relais_1 2022-09-19 14:57:37 lastCmd on
setstate Heizstab_Relais_1 2022-09-19 15:02:24 state off

DetlefR

OT
ZitatAnders gesagt: das splitten ist einfacher als readingsProxy...
Das ist, wie vieles, Geschmackssache. Mich würde es stören, wenn ein phys. Gerät als 4 Geräte in FHEM angelegt ist. Zwar mit gesonderten Namen für die Relais aber ansonsten gleichen Readings.
Mit Readingsproxy habe ich zwar auch mehrere zusätzliche Geräte, aber die stehen alle in Bezug zu einem "Master". Ich weiß nicht ob das beim splitten auch so ist.

Beta-User

Zitat von: DetlefR am 19 September 2022, 15:44:25
OTDas ist, wie vieles, Geschmackssache. Mich würde es stören, wenn ein phys. Gerät als 4 Geräte in FHEM angelegt ist. Zwar mit gesonderten Namen für die Relais aber ansonsten gleichen Readings.
Mit Readingsproxy habe ich zwar auch mehrere zusätzliche Geräte, aber die stehen alle in Bezug zu einem "Master". Ich weiß nicht ob das beim splitten auch so ist.
a) ist es NICHT so, dass die split-Geräte (zwingend) alle Readings aus dem Haupt-Gerät haben müssen. Man kann das verhindern, und wenn man es per attrTemplate macht, ist es in der Regel so, dass im ersten Kanal auch alles landet, was mit der MCU zu tun hat, aber nichts, was mit den Kanälen zu tun hätte, und anders rum ist es genauso...
b) Für Querbeziehungen kann man "associatedWith" nutzen und/oder comment. Wird per attrTemplate beides gesetzt.

Ergo: bevor du irgendwelche RTL in die Welt setzt, befasse dich mit den Details...

PS: Technisch machen benannte sleep auch nichts wesentlich anderes als die on-for-timer in den SetExtensions... Man muss es nur verstehen wollen ;) .
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

DetlefR

@ChrisA4
Leg den Readingsproxy mal so an.

define Heizstab_Relais_1 readingsProxy MQTT2_4fach:POWER1
attr Heizstab_Relais_1 setFn {($CMD eq "on")?"POWER1 ON":"POWER1 OFF";;}
attr Heizstab_Relais_1 setList on off



DetlefR

OT
@Beta-User
Es gibt meistens mehr als eine Lösung. Man muss sich dann nur entscheiden.

ZitatPS: Technisch machen benannte sleep auch nichts wesentlich anderes als die on-for-timer in den SetExtensions... Man muss es nur verstehen wollen ;) .
Das habe ich schon :D. "moving" für das Garagentor macht auch optisch was her. Es gibt nun aber mal on-for-timer. Auch zum anklicken. Warum soll ich das nicht nutzen.

ChrisA4

Zitat von: DetlefR am 19 September 2022, 16:39:37

Leg den Readingsproxy mal so an.

define Heizstab_Relais_1 readingsProxy MQTT2_4fach:POWER1
attr Heizstab_Relais_1 setFn {($CMD eq "on")?"POWER1 ON":"POWER1 OFF";;}
attr Heizstab_Relais_1 setList on off


hab ich und schalten geht

kleine frage dazu am ende die ;; was macht das fürn einen unterschied, hab vorher ohne diese ;; probiert und schalten auch??

Beta-User

Zitat von: DetlefR am 19 September 2022, 16:43:48
OT
@Beta-User
Es gibt meistens mehr als eine Lösung. Man muss sich dann nur entscheiden.
Ja. Aber man sollte vor der Entscheidung alle Argumente kennen. Daher die Klarstellungen von meiner Seite.

Zitat
Es gibt nun aber mal on-for-timer. Auch zum anklicken. Warum soll ich das nicht nutzen.
Weil es immer mehrere Möglichkeiten gibt. Hier ging es darum, im Hintergrund eine Lösung zu haben, die automatisiert läuft?
Für die braucht man eben eigentlich nicht 4 Devices mehr und man muss auch nichts klicken können.

Für den Rest würde ich weiter die "split"-Variante empfehlen, da kann man ohne Klimmzüge drumrum einfach drauflosklicken, wie man lustig ist und hat in Summe ein Device weniger. Und die Frage, ob man per Sprachsteuerung was machen will, darf man auch direkt beantworten :P .
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

TomLee


ChrisA4

@DetlefR

Hab jetzt meine Readingsproxys angelgt und alle schaltet.
Wollte jetzt das notify abgeändert übernehmen

define Heizpatrone notify Wechselrichter:PowerFlow_Site_P_PV:.* {
my $Einspeisung=ReadingsVal('Wechselrichter','Einspeisung',3000);
my $rotation=floor(time()/84600)%3;
my @relais=['Heizstab_Relais_1','Heizstab_Relais_2','Heizstab_Relais_3'];
if (($EVTPART1>2500) && ($Einspeisung>(ReadingsVal($relais[$rotation],'state','on')=~ /on/i ? 100:2700)))
fhem("set $relais[$rotation] on-for-timer 10");
$rotation-=1;
}
if (($EVTPART1>5000) && ($Einspeisung>(ReadingsVal($relais[$rotation],'state','on')=~ /on/i ? 100:2700)))
fhem("set $relais[$rotation] on-for-timer 10");
$rotation-=1;
}
if (($EVTPART1>7500) && ($Einspeisung>(ReadingsVal($relais[$rotation],'state','on')=~ /on/i ? 100:2700)))
fhem("set $relais[$rotation] on-for-timer 10");
}
}


und bekomme diesen Fehler

Missing right curly or square bracket at (eval 11521417) line 1, at end of line
syntax error at (eval 11521417) line 1, at EOF

Unknown command my, try help.
Unknown command my, try help.
IF: no left bracket:   fhem("set $relais[$rotation] on-for-timer 10")
Unknown command $rotation-=1, try help.
Unknown command }, try help.
Unknown command $rotation-=1, try help.
Unknown command }, try help.
Unknown command }, try help.


Was hab ich jetzt wieder falsch ?!?

Beta-User

bin zwar nicht DetlevR, schlage aber mal vor, das notify nur mit leerem Perl-Code anzulegen, und hinterher den Rest in das DEF-Feld einzutragen.

Erster Schritt also:
define Heizpatrone notify Wechselrichter:PowerFlow_Site_P_PV:.* {}

Danach kannst du dich ja mal mit "escapen" und "Maskieren" befassen. Dazu mal die RAW-Definition des fertigen Devices ansehen.
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

DetlefR

@ChrisA4

So wie Beta-User geschrieben hat.
Erst mal das leere Notify anlegen.
Dann auf "DEF" Klicken und da lässt sich dann der gesamte Inhalt austauschen.
Anschliessend den Klick auf "modify Heizpatrone" nicht vergessen ;D

Einen Fehler habe ich gerade noch gesehen. Bei allen drei if Zeilen habe ich am Ende die { vergessenif (($EVTPART1>2500) && ($Einspeisung>(ReadingsVal($relais[$rotation],'state','on')=~ /on/i ? 100:2700))){

ChrisA4


Beta-User

Zitat von: ChrisA4 am 19 September 2022, 17:37:24
und das mit @relais und $relais
ist das richtig so?
https://perldoc.perl.org/perldata

Dafür sind aber etwas viele Klammern verteilt, einen Teil könnte man weglassen....
(Sonst erzeugt man uU. Arrays oder Hashes, wo eigentlich keine sein sollen ;) ).
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

TomLee

Auch wenn https://perldoc.perl.org  "die" Doku ist, find ich für einen Anfänger https://perlmaven.com/perl-arrays erstmal zum einlesen und verstehen besser.

ChrisA4

aber wenn ich unter
   my @relais=['Heizstab_Relais_1','Heizstab_Relais_2','Heizstab_Relais_3']

dann müsste ich doch im if befehl
  if (($EVTPART1>2500) && ($Einspeisung>(ReadingsVal($relais[$rotation],'state','on')=~ /on/i ? 100:2700))){
fhem("set $relais[$rotation] on-for-timer 10")

statt $relais doch @relais stehen
oder verstehe ich da was falsch