Hallo
Ich versuche, dass ein Temperatursensor auf dem Raspberry bei unter 10°C mir eine Email sendet:
Das habe ich in der 99_myUtils.pm datei:
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
1;
sub
DebianMail
{
my $rcpt = shift;
my $subject = shift;
my $text = shift;
my $attach = shift;
my $ret = "";
my $sender = "xxx\@xxx.de";
my $provider = "xxx";
Log 1, "sendEmail RCP: $rcpt";
Log 1, "sendEmail Subject: $subject";
Log 1, "sendEmail Text: $text";
Log 1, "sendEmail Anhang: $attach";
$ret .= qx(sendEmail -f '$sender' -t '$rcpt' -u '$subject' -m '$text' -a $attach -s '$provider' -o tls=auto -o message-charset=utf-8);
$ret =~ s,[\r\n]*,,g; # remove CR from return-string
Log 1, "sendEmail returned: $ret";
}
mit {DebianMail('xxx@xxx.de','Titel','text')};
kann ich auch eine E-Mail senden, aber ich weiß nicht wie man es einstellt das der Raspberry automatisch bei der genannten Temperatur eine E-Mail an mich sendet.
Ich habe an sowas gedacht, aber es funktioniert nicht:
define Temperatursensor1 notify GPIO4_DS18B20_00000636c0e6:temperature:.* { if(ReadingsVal("GPIO4_DS18B20_00000636c0e6",
"temperature","") > 10) { DebianMail('xxx@xxx.de','test','hallo')};
Liebe Grüße
Bitte Deinen Code in Codetags stellen. Oben bei der Symbolleiste das # Zeichen
define Temperatursensor1 notify GPIO4_DS18B20_00000636c0e6:temperature:.* {
if( ReadingsVal("GPIO4_DS18B20_00000636c0e6","temperature","" ) > 10) {
DebianMail('xxx@xxx.de','test','hallo');
}
}
Hallo
danke für die schnelle Antwort :)
Wie genau meinst du das mit "Oben bei der Symbolleiste das # Zeichen"?
Zitat von: DatRaspi am 17 Mai 2017, 11:42:25
Hallo
danke für die schnelle Antwort :)
Wie genau meinst du das mit "Oben bei der Symbolleiste das # Zeichen"?
Da siehst Du ein Symbol das so
#
aus schaut.
Hi,
es fehlt ein schließendes "}" und wahrscheinlich wäre es besser, ReadingsNum statt ReadingsVal zu nehmen.
Gruß,
Thorsten
Die schließende } hatte ich in meinem Beispiel schon repariert.
Zitat von: CoolTux am 17 Mai 2017, 12:36:30
Die schließende } hatte ich in meinem Beispiel schon repariert.
Ich habe das gesehen, aber ich vermute mal der OP nicht.
Gruß,
Thorsten
Also ich habe es jetzt nochmal versucht mit der "}" und ReadingsNum, darauf folgte diese Fehlermeldung:
" Temperatursensor1 already defined, delete it first Unknown command if(, try help. Unknown command DebianMail('xxx@xxx.de','test','hallo'), try help. Unknown command }, try help. Unknown command }, try help. "
Falls das hilft, hier ist meine fhem.cfg:
attr global userattr cmdIcon devStateIcon devStateStyle icon sortby webCmd widgetOverride
attr global autoload_undefined_devices 1
attr global logfile ./log/fhem-%Y-%m.log
attr global modpath .
attr global motd Error messages while initializing FHEM:\
configfile: Unknown command {define, try help.
attr global statefile ./log/fhem.save
attr global updateInBackground 1
attr global verbose 3
define telnetPort telnet 7072 global
define WEB FHEMWEB 8083 global
attr WEB editConfig 1
define WEBphone FHEMWEB 8084 global
attr WEBphone stylesheetPrefix smallscreen
define WEBtablet FHEMWEB 8085 global
attr WEBtablet stylesheetPrefix touchpad
# Fake FileLog entry, to access the fhem log from FHEMWEB
define autocreate autocreate
attr autocreate filelog ./log/%NAME-%Y.log
define eventTypes eventTypes ./log/eventTypes.txt
# Disable this to avoid looking for new USB devices on startup
define initialUsbCheck notify global:INITIALIZED usb create
define Temperatursensor1 GPIO4 BUSMASTER
attr Temperatursensor1 room GPIO4
define GPIO4_DS18B20_00000636c0e6 GPIO4 28-00000636c0e6
attr GPIO4_DS18B20_00000636c0e6 model DS18B20
attr GPIO4_DS18B20_00000636c0e6 room GPIO4
define FileLog_GPIO4_DS18B20_00000636c0e6 FileLog ./log/GPIO4_DS18B20_00000636c0e6-%Y.log GPIO4_DS18B20_00000636c0e6
attr FileLog_GPIO4_DS18B20_00000636c0e6 logtype text
attr FileLog_GPIO4_DS18B20_00000636c0e6 room GPIO4
define SVG_FileLog_GPIO4_DS18B20_00000636c0e6_1 SVG FileLog_GPIO4_DS18B20_00000636c0e6:SVG_FileLog_GPIO4_DS18B20_00000636c0e6_1:CURRENT
attr SVG_FileLog_GPIO4_DS18B20_00000636c0e6_1 room GPIO4
define Temperatursensor1 notify GPIO4_DS18B20_00000636c0e6:temperature:.* {
if( ReadingsNum("GPIO4_DS18B20_00000636c0e6","temperature","" ) > 10) {
DebianMail('xxx@xxx.de','test','hallo');
}
}
Sorry aber mit fhem.cfg Editierung kenne ich mich nicht aus. Du kannst das Notify über FHEMWEB editieren/modifizieren.
Ein list vom notify bringt mir mehr
ZitatTemperatursensor1 already defined
bedeutet das gerät ist schon definiert, Du kannst es nicht noch einmal definieren. Du kannst nicht zwei define Temperatursensor1 ... Befehle hintereinander absetzen. Genau das tust Du in deiner fhem.cfg Und dieser Fehler passiert nur weil Du direkt darin rumfummelst :P
Gruß Otto
Zitat von: CoolTux am 17 Mai 2017, 13:21:56
Sorry aber mit fhem.cfg Editierung kenne ich mich nicht aus. Du kannst das Notify über FHEMWEB editieren/modifizieren.
Ein list vom notify bringt mir mehr
Was für eine list von notify meinst du denn? und wo finde ich diese? :)
in der Kommandozeile von FHEM (Browser) eingeben:list Temperatursensor1
;) bzw allgemein list <DeviceName>
Gruß Otto
Ist es denn das?
Hilft das irgendwie weiter? :-[
Otto hat dir eigentlich schon alles gesagt.
in der von dir geposteten fhem.cfg gibt es:
define
Temperatursensor1 GPIO4 BUSMASTER
und dann ein paar Zeilen darunter nochmal
define
Temperatursensor1 notify GPIO4_DS18B20_00000636c0e6:temperature:.* {
ich hab die codetags bewusst weggelassen, damit ich die beiden sachen fett markieren konntedas geht so nicht und führt zu dem fehler den du nun hast (weil du die fhem.cfg von hand editiert hast!)
den Fehler erstmal beseitigen!!! zB. durch umbenennen des zweiten devices
weiterhin hast du
if( ReadingsNum("GPIO4_DS18B20_00000636c0e6","temperature","" ) > 10) {
möchtest aber laut deinem eingangspost
Zitatich versuche, dass ein Temperatursensor auf dem Raspberry bei unter 10°C mir eine Email sendet:
würde bedeutet dein > muss durch < ersetzt werden.
Achso danke dir, jetzt weiß ich was gemeint war ;D werde es denn nun korrigieren
Wie editiert man denn die fhem.cfg ohne direkt darin rumzubasteln ? :-X
Als Fehlermeldung habe ich nun:
Unknown command if(, try help. Unknown command DebianMail('xxx@xxx.de','test','hallo'), try help. Unknown command }, try help. Unknown command }, try help.
cfg editieren: GAR NICHT!!!!!
man editiert das devce im browser!
Zitat von: DatRaspi am 17 Mai 2017, 14:28:11
Wie editiert man denn die fhem.cfg ohne direkt darin rumzubasteln ? :-X
über das Webinterface, da werden dann schon Überprüfungen durchgeführt und Fehler abgefangen!
Zitat von: DatRaspi am 17 Mai 2017, 14:28:11
Als Fehlermeldung habe ich nun:
Unknown command if(, try help. Unknown command DebianMail('xxx@xxx.de','test','hallo'), try help. Unknown command }, try help. Unknown command }, try help.
bitte ein list von dem notify (das war vorhin schon richtig, aber nicht als screenshot, sondern in code-tags posten.)
ich hoffe du hast nicht einfach die Zeile aus meinem Post kopiert, denn das waren nur auszüge!!!
und natürlich die schon erwähnten klammerfehler beheben bzw. den Code von CoolTux kopieren! (größer/kleiner noch ändern!)
Internals:
DEF BUSMASTER
NAME Temperatursensor1
NR 19
STATE Initialized
TYPE GPIO4
Readings:
2017-05-17 14:48:46 failures 15
Attributes:
room GPIO4
Hier die list vom Temperatursensor1
So sieht das denn ja im Webinterface des Sensors aus.. wie stelle ich das denn ein? Stehe da etwas auf dem Schlauch.. :-[
so erstmal langsam:
1. hast du die einsteiger doku's gelesen?
2. das war kein list von dem notify!
3. hast du alle änderungen wie erwähnt eingearbeitet? (umbenennung, klammersetzung, ....)
die umbenennung machst du in der fhem.cfg. (und das war dann auch die letzte händische bearbeitung der datei für die zukunft ;) )
Nein die Einsteiger Dokus habe ich nicht gelesen.. wo finde ich diese?
Die Änderungen habe ich alle eingearbeitet :)
bitte keine screenshots posten!!
hier die angepinnten beiträge einfach mal durchlesen: https://forum.fhem.de/index.php/board,18.0.html
insbesondere: https://forum.fhem.de/index.php/topic,71806.0.html
und: https://forum.fhem.de/index.php/topic,19621.0.html
und: https://forum.fhem.de/index.php/topic,41693.0.html
//edit:
du hast irgendwie dein notify initialUsbCheck kaputt editiert !
Zitat von: nils_ am 17 Mai 2017, 15:29:22
bitte keine screenshots posten!!
hier die angepinnten beiträge einfach mal durchlesen: https://forum.fhem.de/index.php/board,18.0.html
insbesondere: https://forum.fhem.de/index.php/topic,71806.0.html
und: https://forum.fhem.de/index.php/topic,19621.0.html
und: https://forum.fhem.de/index.php/topic,41693.0.html
//edit:
du hast irgendwie dein notify initialUsbCheck kaputt editiert !
Was habe ich denn kaputt editiert? :-[
Wie bekomme ich das denn wieder hin..?
du musst deine fhem.cfg wieder reparieren.
Backup einspielen oder von Vorne beginnen.
Ich habe ein backup von dem Raspberry raufgespielt
Wie soll ich jetzt weiter vorgehen?
Wie kann ich in dem webbrowser direkt notify einstellen?
Ich dachte erst das geht nur über die fhem.cfg :-[
ich wiederhole mich wirklich ungern, aber lies doch bitte mal durch was hier so alles schon verlinkt wurde. (Anfängerdoku!!)
ZitatIch dachte erst das geht nur über die fhem.cfg
finger weg von der datei. da wird nur im allerhöchsten notfall dran rumgespielt, und auch nur wenn du dir aller folgen und auswirkungen deines handelns bewusst bist!
ZitatWie kann ich in dem webbrowser direkt notify einstellen?
define myNtfy notify GPIO4_DS18B20_00000636c0e6:temperature:.* { SendeMail(<parameter>);; }
in die eingabezeile.... wird wahrscheinlich so nicht richtig funktionieren. aber das kannste das ÜBER DAS WEBINTERFACE korrigieren.
Zitat von: DatRaspi am 18 Mai 2017, 09:23:20Ich dachte erst das geht nur über die fhem.cfg :-[
Wer hat Dir das denn erzählt? mytechblogoderso?
Wenn ohne Ahnung, dann ist auch ganz gut im Event Monitor das gewünschte Event markieren und "Create/Modify device" drücken. Was dann kommt ist fast klickibunti.
Gruß,
Thorsten
Im PDF FHEM für Einsteiger wird das wohl immer noch so beschrieben.
Grüße Jörg
Gesendet von iPhone mit Tapatalk
Zitat von: JoWiemann am 18 Mai 2017, 10:21:09
Im PDF FHEM für Einsteiger wird das wohl immer noch so beschrieben.
Ich hab mal kurz eine Antwort an den Thread gehängt:
https://forum.fhem.de/index.php?topic=19621.msg636916#msg636916
...mal sehen, vielleicht reagiert ja jemand, der das Ding ändern kann.
Gruß,
Thorsten
Hallo,
ich möchte hier auch noch einmal ansetzen und mir eine E-Mail schicken lassen, wenn mein Temperatursensor eine bestimmte Temperatur feststellt bzw. eine bestimmte Temperatur überschritten wird.
Das Thermometer ist in FHEM eingerichtet. Die Temperatur lässt sich auch abrufen.
Auch der E-Mail-Versand funktioniert einwandfrei.
Ich weiß allerdings nicht, wie ich jetzt über den Webbrowser die Programmierung vornehmen kann und wo ich am besten ansetze.
Kann mir jemand behilflich sein?
Danke und viele Grüße
Mandel
Hallo Mandel,
Eventmonitor auf, den Sensor als Filter eintragen, warten bis eine Temperaturmeldung kommt von dieser Zeile ein notify (oder DOIF) anlegen lassen. Jede Zahl auswählen.
Beim notify steht dann eine leere Perlklammer {}
Dort schreibst Du deinen Code rein, in der Art:
if ($EVTPART1 == 21 ){debianmail()}
Gruß Otto
Danke, Otto.
Ich frage mich, wie man als ,,Normalo" das selbst hinbekommen soll. Aber da bin ich froh, Leute wie Euch zu haben, die einen geduldig unterstützen.
Ich habe das so gemacht, wie Du geschrieben hast. Allerdings wurde bei Erreichen der Temperatur von 15 Grad als Test keine E-Mail versandt.
Das ist wahrscheinlich auch nicht schlimm, da ich ansonsten wohl mit E-Mails bombardiert worden wäre. Denn die 15 Grad wären ja den ganzen Tag erreicht. Ich müsste also zudem einen Stop setzen, dass eine E-Mail als Warnung reicht. Oder dass ich jede Stunde eine bekomme.
Meine Raw Definition sieht so aus:
defmod HM_70A1CA_notify_1 notify HM_70A1CA:T:.* {if ($EVTPART1 == 15 ){debianmail('XXX@XXX.XXeu','Temperaturwarnung','Achtung, die Temperatur hat 15 Grad erreicht!')}}
attr HM_70A1CA_notify_1 alias Temperaturwarnung
attr HM_70A1CA_notify_1 room Außentemperatur
setstate HM_70A1CA_notify_1 2021-04-20 10:16:14
setstate HM_70A1CA_notify_1 2021-04-19 23:48:40 state active
Warum wurde die E-Mail nicht versandt? Bzw. warum wurden nicht gleich zig E-Mails versandt?
Danke noch einmal für Eure Unterstützung.
Mandel
Hallo Mandel,
Du hast den ungünstigen Event genommen, es gibt ja diese beiden (sieht bei Dir nach Homematic aus). Eventuell musst Du in den Channel schauen, hängt vom konkreten Sensor ab.
2021-04-20 10:34:26 CUL_HM SensorAussen T: 11.3 H: 79
2021-04-20 10:34:26 CUL_HM SensorAussen temperature: 11.3
Wobei wenn ich richtig überlege, es könnte egal sein. Hier gibt es noch einen Artikel zum notify und was mache ich wenn. https://wiki.fhem.de/wiki/Notify
Kann es sein, Du musst >= 15 nehmen - weil exakt 15 wird nicht erreicht?
Wenn Du das einmalig willst musst Du entweder das notify nach dem trigger deaktivieren (disableAfterTrigger).
Es gibt noch watchdog - das kann einmalig auslösen.
Oder DOIF hat auch solche Möglichkeiten.
Gruß Otto
Danke, Otto.
Ich habe das nun geändert. Eine E-Mail bekomme ich trotzdem nicht. Bei anderen Ereignissen, z.B. Ein- und Ausschalten von Beleuchtung klappt es mit dem E-Mail-Versand.
defmod HM_70A1CA_notify_1 notify HM_70A1CA:T:.* {if ($EVTPART1 >= 15 ){debianmail('XXX@XXX.XX','Temperaturwarnung','Achtung, die Temperatur hat 15 Grad erreicht!')}}
attr HM_70A1CA_notify_1 alias Temperaturwarnung
attr HM_70A1CA_notify_1 disabledAfterTrigger 3600
attr HM_70A1CA_notify_1 room Außentemperatur
setstate HM_70A1CA_notify_1 2021-04-20 14:28:27
setstate HM_70A1CA_notify_1 2021-04-20 14:27:32 state active
Im Eventmonitor wird das angezeigt:
2021-04-20 14:43:16 CUL_HM HM_70A1CA battery: ok
2021-04-20 14:43:16 CUL_HM HM_70A1CA T: 32.7
2021-04-20 14:43:16 CUL_HM HM_70A1CA temperature: 32.7
Warum gibt es überhaupt die beiden fast gleichen Ausgaben bei der Temperatur, einmal mit ,,T: 32.7" und einmal mit ,,temperature: 32.7"?
Danke und und Grüße
Mandel
Also rein optisch sieht das alles gut aus. Ich habe gerade kein Idee. Der Trigger passt zum Event. :o
Kannst Du mal den kompletten Event mit dem notify loggen, wie in meinem Wiki Link beschrieben?
die beiden Events: Der Eine ist die state Meldung - da siehst Du bei mir noch zusammengefasst mit der Luftfeuchte. Das Andere ist nur das temperature Reading. Ist eben so bei den Homematicgeräten.
Zitat von: Otto123 am 20 April 2021, 17:37:53
Also rein optisch sieht das alles gut aus. Ich habe gerade kein Idee. Der Trigger passt zum Event. :o
Ich mische mich ja nur ungern ein, aber sollte der Trigger nicht:
HM_70A1CA.T:.*
lauten ?
Nein. Wäre nicht völlig verkehrt, belastet aber unnötig das System, da kein NOTIFYDEV gebildet wird.
https://forum.fhem.de/index.php?topic=115414.0
Der empfohlene Trigger für notify lautet device:regexp und nicht regexp ;)
Zitat von: Otto123 am 20 April 2021, 18:48:22
Der empfohlene Trigger für notify lautet device:regexp und nicht regexp ;)
Oh, wieder was gelernt. Dann werde ich das in meinem System auch mal anpassen. Danke für den Hinweis
ZitatKannst Du mal den kompletten Event mit dem notify loggen, wie in meinem Wiki Link beschrieben?
Kannst Du mit mal bitte den Link schicken. Ich finde den nicht und weiß nicht, wie ich das loggen kann - Danke.
Antwort #34 Punkt 4.3. :)
https://wiki.fhem.de/wiki/Notify#Anweisung
ZitatKannst Du mal den kompletten Event mit dem notify loggen, wie in meinem Wiki Link beschrieben?
Im Logfile steht bei mir gar nichts. Das ist immer leer.
Ich habe aber den Fehler gefunden. Ich habe jetzt anstatt "debianmail" "DebianMail" eingetragen.
Nun kommen die E-Mails an.
Vielen Dank und Grüße
Mandel
Zitat von: MandelHL am 19 April 2021, 21:00:00
Auch der E-Mail-Versand funktioniert einwandfrei.
Zitat von: MandelHL am 20 April 2021, 14:47:23
Bei anderen Ereignissen, z.B. Ein- und Ausschalten von Beleuchtung klappt es mit dem E-Mail-Versand.
:o
deswegen habe ich den Ausführungsteil nicht vordergründig angezweifelt!
ZitatIm Logfile steht bei mir gar nichts. Das ist immer leer.
Wie soll ich das jetzt verstehen? Der Sinn der Anleitung im Wiki ist doch genau den Ausführungsteil durch einen Logbefehl zu ersetzen!? Und dieser Befehl funktioniert bei Dir nicht? ::)
Grüße Otto
Hallo noch mal,
@Otto: Ich glaube, dass ich das mit dem Logfile und dem Logbefehl nicht richtig gemacht habe. Das sehe ich mir noch einmal an.
Ich habe nun aber noch eine andere Frage:
Kann ich mit ,,disabledtrigger" das Versenden der E-Mail auf einmal begrenzen? Jetzt habe ich ,,3600" dahinter stehen, damit ich die Nachricht jede Stunde bekomme, solange die Temperatur überschritten ist.
Kann ich die Zahl dahinter weglassen, damit die E-Mail dann wirklich nur einmal kommt?
Als Steigerung möchte ich jetzt, dass die Markise bei mehr als 42 Grad um 10 % ausfährt. Darunter kann sie dann auch wieder einfahren.
Es sei denn, ich fahre sie manuell aus.
Das mit der Temperatur habe ich nun ja so weingerichtet:
defmod HM_70A1CA_notify_1 notify HM_70A1CA:T:.* {if ($EVTPART1 >= 42 ){DebianMail('XXX@XXX.XX','Temperaturwarnung','Achtung, die Temperatur hat 42 Grad erreicht!')}}
attr HM_70A1CA_notify_1 alias Temperaturwarnung
attr HM_70A1CA_notify_1 disabledAfterTrigger 3600
attr HM_70A1CA_notify_1 room Außentemperatur
setstate HM_70A1CA_notify_1 2021-04-26 11:19:48
setstate HM_70A1CA_notify_1 2021-04-25 21:06:32 state active
Die Markise ist so eingerichtet:
defmod Markise CUL_HM 336A56
attr Markise .devInfo 010100
attr Markise .mId 006A
attr Markise .stc 30
attr Markise IODev HMLANGW
attr Markise IOgrp vccu:HMLANGW
attr Markise autoReadReg 5
attr Markise devStateIcon .*:shutter_closed
attr Markise event-on-change-reading .*
attr Markise eventMap on:ausfahren off:einfahren
attr Markise expert defReg,rawReg
attr Markise model HM-LC-BL1PBU-FM
attr Markise peerIDs 00000000
attr Markise room Markise
attr Markise serialNr LEQ1435668
attr Markise subType blindActuator
attr Markise webCmd stop:ausfahren:90:70:50:30:10:einfahren
setstate Markise einfahren
setstate Markise 2021-03-06 00:26:05 .D-devInfo 010100
setstate Markise 2021-03-06 00:26:05 .D-stc 30
setstate Markise 2021-03-06 15:12:13 .R-confBtnTime permanent
setstate Markise 2021-03-06 15:12:13 .R-intKeyVisib invisib
setstate Markise 2021-03-06 15:12:13 .R-localResDis off
setstate Markise 2021-03-06 15:12:14 .R-refRunCounter 0
setstate Markise 2021-03-06 15:12:14 .R-statusInfoMinDly 2 s
setstate Markise 2021-03-06 15:12:14 .R-statusInfoRandom 1 s
setstate Markise 2021-03-06 15:12:14 .R-transmitTryMax 6
setstate Markise 2021-04-25 21:06:33 .associatedWith Markise,Markise
setstate Markise 2021-03-06 15:12:14 .peerListRDate 2021-03-06 15:12:14
setstate Markise 2021-04-25 21:06:54 .protLastRcv 20210425210654
setstate Markise 2021-04-25 21:01:31 CommandAccepted yes
setstate Markise 2021-03-06 00:26:05 D-serialNr LEQ1435668
setstate Markise 2021-03-06 15:12:13 PairedTo 0x25788A
setstate Markise 2021-03-06 15:12:14 R-driveDown 50 s
setstate Markise 2021-03-06 15:12:14 R-driveTurn 0.5 s
setstate Markise 2021-03-06 15:12:14 R-driveUp 50 s
setstate Markise 2021-03-06 15:12:13 R-pairCentral 0x25788A
setstate Markise 2021-03-06 15:12:14 R-sign off
setstate Markise 2021-03-06 15:12:13 RegL_00. 00:00 02:01 0A:25 0B:78 0C:8A 15:FF 18:00
setstate Markise 2021-03-06 15:12:14 RegL_01. 00:00 08:00 09:00 0A:00 0B:01 0C:F4 0D:01 0E:F4 0F:05 10:00 30:06 57:24
setstate Markise 2021-03-06 15:12:12 cfgState updating
setstate Markise 2021-04-25 21:06:54 commState CMDs_done
setstate Markise 2021-04-25 21:06:54 deviceMsg off (to HMLANGW)
setstate Markise 2021-04-25 21:06:54 level 0
setstate Markise 2021-04-25 21:06:54 motor stop:off
setstate Markise 2021-04-25 21:06:54 pct 0
setstate Markise 2021-04-25 21:06:54 recentStateType info
setstate Markise 2021-04-25 21:06:54 state off
setstate Markise 2021-04-25 21:06:54 timedOn off
setstate Markise 2021-04-25 21:01:31 trigLast fhem:02
Empfiehlt es sich jetzt, den bestehenden DEF-Befehl bei der Temperatur zu erweitern bzw. zu ergänzen oder sollte ich besser einen neues notify setzen, damit es wie gewünscht funktioniert?
Danke noch mal, dass Ihr mir hier behilflich seid,
Mandel
Hi,
ZitatdisabledAfterTrigger <sekunden>
deaktiviert die Ausführung für <sekunden> nach dem das notify ausgelöst wurde.
Die Doku ist ja eindeutig.
Wenn Du das einmalig willst, bzw. eigentlich bis ein andere Zustand erreicht ist musst Du mehr Bedingungen einbauen:
Abfragen ist die Markise draußen oder drinnen?
Temperatur nicht nur über sondern auch unterschritten?
Das kannst Du alles in eine Perl Logik bauen, Du kannst auch andere Module (DOIF, THRESHOLD,ASC) dafür nehmen, die das vielleicht einfacher abbilden. Je nach dem wie es für Dich angenehmer ist.
Diese Code ist für die DEF nicht für defmod!
{
if ($EVTPART1 >= 42 and ReadingsNum('Markise','pct',0) < 10 )
{fhem("set Markise pct 10");
DebianMail('XXX@XXX.XX','Temperaturwarnung','Achtung, die Temperatur hat 42 Grad erreicht!')}
elsif ($EVTPART1 < 42 and ReadingsNum('Markise','pct',99) != 0 )
{fhem("set Markise pct 0");
DebianMail('XXX@XXX.XX','Temperaturwarnung','Markise fährt ein!')}
}
Damit die Markise nicht ständig raus und reinfährt kannst Du das beliebig ändern / kombinieren: disabledAfterTrigger 300 oder $EVTPART1 < 38 anstatt 42
Gruß Otto
Danke, Otto.
Das heißt, ich öffne im WI die DEF der Markise, in der zur Zeit nur "336A56" steht und ersetze das durch
HM_336A56 {if ($EVTPART1 >= 42 and ReadingsNum('Markise','pct',0) < 10 )
{fhem("set Markise pct 10");
DebianMail('XXX@XXX.XX','Hitzewarnung - Markise fährt aus','Achtung, die Temperatur hat 42 Grad erreicht! Die Markise fährt aus.')}
elsif ($EVTPART1 <= 35 and ReadingsNum('Markise','pct',99) != 0 )
{fhem("set Markise pct 0");
DebianMail('XXX@XXX.XX','Entwarnung - Markise fährt ein','Die Temperatur ist wieder unter 35 Grad. Die Markise fährt wieder ein!')}
}
Wenn ich das so mache, bekomme ich den Hinweis "wrong syntax: define <name> CUL_HM 6-digit-hex-code [Raw Message]".
So ähnlich ist es aber auch in der DEF der Temperatur eingetragen:
HM_70A1CA:T:.* {if ($EVTPART1 >= 42 ){DebianMail('XXX@XXX.XX','Temperaturwarnung','Achtung, die Temperatur hat 42 Grad erreicht!')}}
Ich weiß, dass wahrscheinlich absolute Anfängerfehler sind. Aber deshalb poste ich das ja auch in diesem Bereich.
Grüße
Mandel
Nein, dein Markisen Device darfst Du nicht verändern!
Das ist der Ersatz der DEF die Du schon in deinem notify hast. Als aus dem {....} wird das in meinem Post.
In der DEF deshalb weil sonst die Zeilenumbrüche und die ; nicht stimmen.
Danke, das hat super geklappt.
ZitatDiese Code ist für die DEF nicht für defmod!
Obwohl ich den Code in die DEF geschrieben habe, steht in der Raw Definition trotzdem ,,defmode".
Ist das denn trotzdem richtig oder muss ich daraus jetzt ,,def" machen?
Es funktioniert ja trotzdem so:
defmod HM_70A1CA_notify_1 notify HM_70A1CA {if ($EVTPART1 >= 40 and ReadingsNum('Markise','pct',0) < 10 )\
{fhem("set Markise pct 10");;\
DebianMail('XXX@XXX.XX','Hitzewarnung - Markise fährt aus','Achtung, die Temperatur hat 42 Grad erreicht! Die Markise fährt aus.')}\
elsif ($EVTPART1 <= 35 and ReadingsNum('Markise','pct',99) != 0 )\
{fhem("set Markise pct 0");;\
DebianMail('XXX@XXX.XX','Entwarnung - Markise fährt ein','Die Temperatur ist wieder unter 35 Grad. Die Markise fährt wieder ein!')}\
}
attr HM_70A1CA_notify_1 alias Temperaturwarnung
attr HM_70A1CA_notify_1 disabledAfterTrigger 3600
attr HM_70A1CA_notify_1 room Außentemperatur
setstate HM_70A1CA_notify_1 2021-04-26 23:07:43
setstate HM_70A1CA_notify_1 2021-04-26 18:00:42 state active
Aufgrund dieser Zeile
ReadingsNum('Markise','pct',0) < 10 )\
gehe ich davon aus, dass wenn ich die Markise komplett ausfahre, sie bei einer Temperatur unter 35 Grad nicht wieder einfährt. Das liegt daran, dass die Ausgangsposition nicht <10 war.
Sehe ich das richtig?
Und wenn ich mich entscheiden würde, eine weitere E-Mail bei Minusgraden verschicken zu lassen, müsste ich das ganze noch einmal umschreiben, weil es mit ,,elsif" nicht geht. Oder?
Vielen Dank noch mal, dass das Dank Deiner Hilfe so gut klappt.
Grüße, Mandel
ZitatObwohl ich den Code in die DEF geschrieben habe, steht in der Raw Definition trotzdem ,,defmode".
Ist das denn trotzdem richtig oder muss ich daraus jetzt ,,def" machen?
Schau Dir doch mal die Unterschiede des Codes an im DEF Editor und in der Raw Definition. (Semikolon Zeilenenden)
Das meinte ich :) - ist immer etwas schwierig das im Redefluss einzuwerfen. Man muss den Code anders formatieren, je nach dem ob man ihn im DEF Editor oder in der Raw Definition eingibt. Das ganze ist als Einsteiger auch schwer zu verstehen, hat aber Entwicklungshistorische Gründe. Im DEF Editor ist es normaler Perl Syntax wie in jedem Editor, in der Raw Definition steht es so wie es in der Config steht, erweitert um Strukturelemente damit FHEM den Code verarbeiten kann.
Mit Deiner weiteren Annahme hast Du nicht Recht.
elsif ($EVTPART1 <= 35 and ReadingsNum('Markise','pct',99) != 0 )
Wenn die temp kleinergleich 35 ist und die Markise nicht eingefahren ist (pct ist nicht 0) dann fahre sie ein. Wo sie vorher stand ist da nicht hinterlegt.
Der erste Teil:
if ($EVTPART1 >= 40 and ReadingsNum('Markise','pct',0) < 10 )
Wenn die Temp größergleich 40 ist und die Markise nicht wenigsten auf pct 10 steht dann fahre sie auf pct 10
Mit dem "Längenvergleich" wird ja primär sichergestellt, das alles nur einmal passiert. Der Zustand der Markise wird dazu abgefragt (genaugenommen nur der Zustand des Aktors).
ZitatUnd wenn ich mich entscheiden würde, eine weitere E-Mail bei Minusgraden verschicken zu lassen, müsste ich das ganze noch einmal umschreiben, weil es mit ,,elsif" nicht geht. Oder?
Warum nicht? Einfach ein weiteres elsif dazu? Nur dann brauchst ein Kriterium damit die Email nicht fortlaufend kommt. Wenn die Markise bei 0 steht springt ja der zweite Zweig nicht an, also kann der dritte bei < 0 zuschlagen.
Es ist die Frage ob man die Steuerung der Markise und die Meldung zu bestimmten Temperaturen nicht lieber getrennt abhandelt.
Vielen Dank, Otto.
Dann kann ich mein Notify ja so stehen lassen.
Wenn ich das jetzt richtig sehe, dann habe ich Stand jetzt zwei Voraussetzungen, die zum Einfahren der Markise führen:
1. Die Temperatur sinkt wieder auf 35 Grad. Und
2. Der Disabledtrigger sorgt mit der "3600" dafür, dass das Einfahren frühestens nach einer Stunde erfolgt.
Ich gehe davon aus, dass die "3600" Vorrang hat, was bedeutet, wenn die Temperatur von 35 Grad schon nach 10 Minuten erreicht ist, fährt die Markise trotzdem erst nach einer Stunde ein.
Wenn das richtig ist, muss ich mal sehen, ob ich das so lasse oder den "disabledrigger" rausnehme.
Der jetzige Grund der Programmierung ist, dass ich zwei Lautsprecher habe, die direkt unter dem Glasdach hängen. Die möchte ich vor der Sonne bzw. den hohen Temperaturen zu schützen, indem die Markise darüber fährt.
Leider fällt mir nichts ein, wie ich die Markise ausfahren kann, ohne dass sie gleich wieder einfährt, weil z.B. nur die Sonne blendet, aber die Temperatur nicht so hoch ist.
Es sei denn ich baue einen Button, mit dem ich eine Deaktivierung programmiere und nur diesen Knopf drücke.
Wenn jemand eine bessere Idee hat ....
Danke für alles, viele Grüße
Mandel
Hi Mandel,
mit einem Temperatur Differenz sensor HM-WDS30-OT2-SM kannst Du simpel einen Sonnensensor bauen. Einen Sensor mit Alufolie umwickeln, beide zusammen in die Sonne hängen, Diff > 3 grad -> Sonne scheint.
Gruß Otto
Super Idee, aber eher für einen anderen Fall.
In diesem Fall geht es nur darum, nicht mehr als 40 Grad auf die Lautsprecher einwirken zu lassen. Dann muss die Markise einen Meter raus. Darunter kann sie wieder rein, es sei denn, dass ich diese aus anderen Gründen nutzen und ausfahren möchte.
Hier sehe ich hier noch die größte Herausforderung.
Obwohl es vielleicht sogar mit Deinem vorgeschlagenen Sensor klappen kann, weil die Temperatur wahrscheinlich extrem auseinander liegen würde. Ich probiere das mal aus.
Danke für den Tipp und beste Grüße
Mandel
Hallo,
ich habe gerade Probleme mit meiner Programmierung beim Ausfahren der Markise bei einer bestimmten Temperatur. Ich meine, dass das schon mal ging.
Aber jetzt fährt die Markise bei 40 und mehr Grad nicht um 10 % aus und schickt mir auch keine E-Mail.
Wenn ich sie dann aber manuell um 10 % ausfahre, fährt sie bei bei 35 Grad und weniger wieder ein. Die E-Mail erhalte ich dann auch.
Kann mir jemand helfen und mitteilenden, woran das liegt?
defmod HM_70A1CA_notify_1 notify HM_70A1CA {if ($EVTPART1 >= 40 and ReadingsNum('Markise','pct',0) < 10 )\
{fhem("set Markise pct 10");;\
DebianMail('XXX@XXX.eu','Hitzewarnung - Markise fährt aus','Achtung, die Temperatur hat 42 Grad erreicht! Die Markise fährt aus.')}\
elsif ($EVTPART1 <= 35 and ReadingsNum('Markise','pct',99) != 0 )\
{fhem("set Markise pct 0");;\
DebianMail('XXX@XXX.eu','Entwarnung - Markise fährt ein','Die Temperatur ist wieder unter 35 Grad. Die Markise fährt wieder ein!')}\
}
attr HM_70A1CA_notify_1 alias Temperaturwarnung
attr HM_70A1CA_notify_1 disabledAfterTrigger 3600
attr HM_70A1CA_notify_1 room Außentemperatur
setstate HM_70A1CA_notify_1 2021-05-16 08:40:19
setstate HM_70A1CA_notify_1 2021-05-10 11:22:24 state active
Wenn noch etwas an Infos fehlt, schicke ich das gerne noch hinterher.
Danke und viele Grüße
Mandel
Moin,
ich weiß nicht warum, aber Du hast mal irgendwann im Laufe dieser Diskussion den Trigger einfach umgebaut. Du bist weg vom: Trigger auf temperature bzw: T: und hast gewechselt zum: trigger auf alles!? Das ist für Homematic Geräte sozusagen ein no go!
Also bau das wieder so um wie ich das schon mal empfohlen hatte:
HM_70A1CA:temperature:.*
Gruß Otto
Danke, Otto.
Dann sollte ich das so jetzt richtig gemacht haben, oder?
defmod HM_70A1CA_notify_1 notify HM_70A1CA:temperature:.* {if ($EVTPART1 >= 40 and ReadingsNum('Markise','pct',0) < 10 )\
{fhem("set Markise pct 10");;\
DebianMail('XXX@ XX.eu','Hitzewarnung - Markise fährt aus','Achtung, die Temperatur hat 42 Grad erreicht! Die Markise fährt aus.')}\
elsif ($EVTPART1 <= 35 and ReadingsNum('Markise','pct',99) != 0 )\
{fhem("set Markise pct 0");;\
DebianMail('XXX@XXX.eu','Entwarnung - Markise fährt ein','Die Temperatur ist wieder unter 35 Grad. Die Markise fährt wieder ein!')}\
}
attr HM_70A1CA_notify_1 alias Temperaturwarnung
attr HM_70A1CA_notify_1 disabledAfterTrigger 3600
attr HM_70A1CA_notify_1 room Außentemperatur
setstate HM_70A1CA_notify_1 2021-05-16 13:46:32
setstate HM_70A1CA_notify_1 2021-05-10 11:22:24 state active
Kannst Du das bitte noch einmal bestätigen?
Danke und schönen Sonntag
MandelHL
Hi,
sieht so aus: kontrolliere doch solche Dinge immer im Evenmonitor! Da sieht man doch genau was passiert. Deinen trigger als Filter:
HM_70A1CA:temperature:.*
Er soll nur auf Temperaturen triggern!
im Gegensatz zu HM_70A1CA als Filter (und Eventmonitor auf notifyType gestellt!) da siehst Du auf was er sonst noch triggert und dann immer eine Stunde pause macht! -> disabledAfterTrigger 3600
Gruß Otto
Danke, es funktioniert. Den Trigger habe ich erst einmal rausgenommen.
Mal sehen, wie ich den später setze. Nicht, dass die Markise ständig aus- und einfährt.
Aber so sind die Lautsprecher auf jeden Fall vor der Hitze geschützt.
Das mit dem Eventmonitor habe ich nicht ganz verstanden.
Ich habe
HM_70A1CA:temperature:.*
eingetragen und ,,Match the whole line" gelassen. Aber nichts passiert.
Oder war ich nur zu ungeduldig?
VG
Mandel
ZitatDen Trigger habe ich erst einmal rausgenommen.
Was meinst Du damit?
Eventmonitor:
Sorry habe ich nicht extra dazu geschrieben. Entweder notify Type - das musst Du in diesem Fall wählen
Oder match the whole line, dann ist es nicht die (spezielle) Variante deviceName:regExp sondern ein komplettes regExp sowas wie .*temperature.*
Sorry, ,,DisabledAfterTrigger 3600" habe ich erst mal gelöscht.
Zitat
Ich würde das gerne so programmieren, dass sie nur automatisch einfährt, wenn sie auf ,,10" ausgefahren ist.
Bei allen anderen Werten soll diese Funktion deaktiviert werden.
Dann einfach statt '!=0' im elsif '==10' schreiben, dann passiert das Einfahren nur bei pct 10, so wie du im Text geschrieben hast...
Ob es tatsächlich GENAU das ist was du willst musst du wissen... ;)
Gruß, Joachim
Hallo noch mal,
ich möchte die Funktion der automatischen Markisensteuerung noch mehr automatisieren.
Mit der derzeitigen Steuerung fährt die Markise ausschließlich bei Stand "10" temperaturgesteuert aus und ein, was auch so sein soll:
defmod HM_70A1CA_notify_1 notify HM_70A1CA:temperature:.* {if ($EVTPART1 >= 42 and ReadingsNum('Markise','pct',0) < 10 )\
{fhem("set Markise pct 10");;\
DebianMail('XXX@XXX.XX','Hitzewarnung - Markise fährt aus','Achtung, die Temperatur hat 42 Grad erreicht! Die Markise fährt aus.')}\ elsif ($EVTPART1 <= 30 and ReadingsNum('Markise','pct',99) == 10 )\{fhem("set Markise pct 0");;\
DebianMail('XXX@XXX.XX','Entwarnung - Markise fährt ein','Die Temperatur ist wieder unter 30 Grad. Die Markise fährt wieder ein!')}\ } attr HM_70A1CA_notify_1 alias Markise Hitze-Automatik attr HM_70A1CA_notify_1 appOptions { \
"template": "switch",\
"home": true,\
"sortby": "2",\
"setup": {\
"status": \
{\
"bar": [\
"state:inactive:0:#DE3A1F:success", \
"state:active:100:success" \
]\
},\
"main": \
[{\
"leftBtn": "mdi-power-off" ,\
"leftClick": ["state::inactive"],\
"text": \
[\
"state:inactive:deaktiviert" ,\
"state:active:aktiviert" ,\
"state::%s"\
],\
"rightBtn": "mdi-power-on" ,\
"rightClick": ["state::active"]\
}] \
}\
}\
\
attr HM_70A1CA_notify_1 group Markise
attr HM_70A1CA_notify_1 room Markise
attr HM_70A1CA_notify_1 sortby ,,2"
attr HM_70A1CA_notify_1 webCmd active:inactive
Damit das aber nicht alle 10 Minuten passiert, stelle ich den Schalter bei sonnigem Wetter dann immer manuell auf "inactive".
Ich würde das jetzt aber gerne so einstellen, dass keine manuelle Deaktivierung mehr vorgenommen werden muss.
Wenn die Markise auf "pct 10" steht, die Helligkeit des Devices "Wetterstation" unter <=240 ist oder es nach 19 Uhr ist, soll die Markise einfahren.
Mein Problem ist in diesem Fall, dass ich mehrere Bedingungen habe und das deshalb nicht hinbekomme.
Oder ist es vielleicht sogar empfehlenswert, das in die "99_myUtils.pm" auszulagern und da die Abfrage vorzunehmen?
Eine Frage habe ich noch zum ReadingsNum:
ReadingsNum('Markise','pct',0) < 10 )
ReadingsNum('Markise','pct',99) == 10 )
Ich habe verstanden, dass der dritte Wert in den Klammern der default Wert ist. Ist es aber in meinem Fal überhaupt wichtig, welche Zahl da steht?
Es geht mir nur darum, das zu verstehen. Es funktioniert ja einwandfrei.
Danke und Grüße
Mandel
Hi,
ist doch aber analog zu den anderen?
($EVTPART1 >= 42 and ReadingsNum('Markise','pct',0) < 10 )
($EVTPART1 >= 42 and ReadingsNum('Markise','pct',0) < 10 and (ReadingsNum('Wetterstation','Helligkeit',0) <= 240 or $hour >= 19))
Der Defaultwert wird häufig dafür genommen um Fehler zu behandeln, da Du das nicht tust kann darin stehen was will.
Gruß Otto
Danke, Otto.
Aber ich denke, das ist nicht das, was ich meine.
Derzeit sieht es so aus:
($EVTPART1 >= 42 and ReadingsNum('Markise','pct',0) < 10 )
Das bedeutet, wenn die Temperatur mindestens 42 Grad ist und die Markise pct weniger als 10 ist, mache dieses und jenes.
Deine Zeile bedeutet doch:
($EVTPART1 >= 42 and ReadingsNum('Markise','pct',0) < 10 and (ReadingsNum('Wetterstation','Helligkeit',0) <= 240 or $hour >= 19))
Wenn die Temperatur mindestens 42 Grad beträgt und die Helligkeit niedriger 240 ist oder es später als 19 Uhr ist, mache dieses oder jenes.
Der erste Befehl passt da schon.
Allerdings kommt nach
($EVTPART1 >= 42 and ReadingsNum('Markise','pct',0) < 10 )
die Bedingung, nämlich:
Fahre die Markise auf pct 10 aus
{fhem("set Markise pct 10");;\
und lasse sie da solange, bis die Helligkeit von 240 unterschritten wird oder es mindestens 19 Uhr ist.
Das soll aber nur gelten, wenn sich die Markise auf pct 10 befindet, da diese sonst auch bei allen anderen Positionen aus- und einfährt.
Mir fällt dabei auf, dass ich dann mit den 30 Grad gar nicht mehr arbeiten muss.
ich würde das dann so eintragen:
elsif (ReadingsNum('Wetterstation','Helligkeit',0) <= 240 or $hour >= 19 and ReadingsNum('Markise','pct',99) == 10 )\
Ist das so richtig?
Viele Grüße
Mandel
Bedenke:
das and dies or jenes and alles
ist etwas anderes als das and (dies or jenes) and alles
ich hatte verstanden es soll entweder dunkel oder spät sein wenn es 10 ist, in deiner Lösung ist es (10 und spät) oder es ist dunkel. Also bei dunkel ist der Zweig wahr.
https://perldoc.perl.org/perlop#Operator-Precedence-and-Associativity
Danke Dir. Das ist wie Punktrechnung vor Strichrechnung.
elsif (ReadingsNum('Wetterstation','Helligkeit',0) <= 240 or $hour >= 19 and ReadingsNum('Markise','pct',99) == 10 )\
Das heißt, das ist von den Klammern her falsch?
https://perldoc.perl.org/perlop#Operator-Precedence-and-Associativity
Das sehe ich mir mal an. Danke.
Zitat von: MandelHL am 11 Juni 2021, 13:08:05
Das heißt, das ist von den Klammern her falsch?
Ja mMn schon. Da sind ja keine für die Operatoren :)
Als ganz grobe Regel für den Hinterkopf: Bei Mischung aus
and und
or muss man nachdenken und den
or Teil meistens einklammern ;)
elsif (ReadingsNum(('Wetterstation','Helligkeit',0) <= 240 or $hour >= 19) && ReadingsNum('Markise','pct',99) == 10 )\
Dann würde ich denken, dass es so richtig ist. Ich habe jetzt "and" durch && ersetzt.
So dürfte das passen, oder?
Zitat von: MandelHL am 11 Juni 2021, 13:46:03
Dann würde ich denken, dass es so richtig ist. Ich habe jetzt "and" durch && ersetzt.
Ist etwas besser, aber:
Zitat von: Otto123 am 11 Juni 2021, 13:24:19
Als ganz grobe Regel für den Hinterkopf: Bei Mischung aus and und or muss man nachdenken und den or Teil meistens einklammern ;)
Noch eine "grobe Regel" als Ergänzung:
Immer "&&" statt "and" bzw. "||" statt "or" (und kein "not", dafür "!"). Der "Text" ist zwar einfacher zu lesen, aber wenn man (unbeabsichtigt) mischt, kommen uU. komische Ergebnisse raus...
So eine "knackige" Erkläung bekommt man dafür nicht so recht, aber ggf. mal das hier nach http://perlcritic.com/ einfügen und mit mind. "stern" analysieren lassen:
if ($a > $b and $c < $d && $e < $f) {
};
Zitat von: MandelHL am 11 Juni 2021, 13:46:03
Dann würde ich denken, dass es so richtig ist. Ich habe jetzt "and" durch && ersetzt.
Na jetzt habe ich was gemacht ;D
Du hast zusätzlich eine Klammer um or gemacht, damit passt das auf alle Fälle - aber wie Beta-User sagt: nicht mischen, das erhöht die Komplexität :)
Also entweder durchgängig die Worte nehmen
and or not oder besser durchgängig die Zeichen
&& || ! Für mich fühlen sich die Worte geschmeidiger an - aber ich weiß die Empfehlung ist anders ;)
Zitat von: Otto123 am 11 Juni 2021, 14:12:33
Für mich fühlen sich die Worte geschmeidiger an
...kann ich nachvollziehen, ich war auch mal "unless"-fanboy ;D ...
Aber spätestens, wenn man erfolgreich zwei oder drei Bedingungen in unless reingebastelt hat, stellt man dann mit ziemlicher Sicherheit dann "irgendwann" später fest, dass man was ergänzen muss, aber dass da ja eine "oder"-Negation drin ist, und hat definitiv keinen Plan mehr davon, was das ganze denn eigentlich sollte....?!?
Kurz: es ist unwartbar!
(Ich habe da noch ein ganz spezielles "unless" in einem fremden Modul im Kopf, von dem ich beim gemeinsamen Überarbeiten ausdrücklich die Finger gelassen habe, weil ich schlicht bis auf den heutige Tag nicht mit letzter Genauigkeit verstehe, was da warum (nicht) passieren soll; dem Maintainer ging es ähnlich...).
Ergo: Raus (!) mit "and", "or" "not" und "unless" wo es einem vor die Flinte läuft... Ist auf die Dauer einfacher, wenn man sich mal dran gewöhnt hat.
(Dasselbe gilt übrigens für "zu viele" Klammern: Wenn eine (logische) Klammer irgendwo steht, sollte sie eine Bedeutung haben).
Just my2ct.
Ich bekomme leider eine Fehlrmeldug, mit der ich nichts anzufangen weiß
Auf
elsif (ReadingsNum(('Wetterstation','Helligkeit',0) <= 240 || $hour >= 19) && ReadingsNum('Markise','pct',99) == 10 )\
bekomme ich die Meldung
Not enough arguments for main::ReadingsNum at (eval 37805) line 4, near "19) "
Welches Argument fehl denn da?
Zitat von: MandelHL am 11 Juni 2021, 16:13:14
Ich bekomme leider eine Fehlrmeldug, mit der ich nichts anzufangen weiß
Du solltest einen Editor mit "syntax-highlighting" (wie codemirror für FHEMWEB) verwenden, dann ist das Klammern zählen bzw. erkennen, was zu was gehört deutlich einfacher:
Zitat
elsif (ReadingsNum(('Wetterstation','Helligkeit',0) <= 240 || $hour >= 19) && ReadingsNum('Markise','pct',99) == 10 )\
Du bist m.E. beim "Verteilen" Verrutscht:
elsif ( ( ReadingsNum('Wetterstation','Helligkeit',0) <= 240 || $hour >= 19 ) && ReadingsNum('Markise','pct',99) == 10 )\
Hallo mal wieder,
das mit dem Aus- und Einfahren der Markise bei bestimmter Temperatur oder bestimmter Helligkeit klappt super.
Nun würde ich mir noch gerne eine E-Mail schicken lassen, wenn die Windstärke 9 bft bzw. 75 km/h erreicht.
Die Beiträge #61, #62 und #63 fassen zusammen, wie die Programmierung derzeit aussieht.
Ich weiß jetzt allerdings nicht, wo und wie ich die Programmierung für die E-Mail bei Erreichen der genannten Windstärke programmiert werden muss.
Das Wie würde ich aus der obengenannten Programmierung ableiten. Aber über das Wo bin ich mir nicht bewusst.
Danke für Eure Hilfe,
Mandel
Zitat von: MandelHL am 18 August 2021, 10:14:15
Hallo mal wieder,
das mit dem Aus- und Einfahren der Markise bei bestimmter Temperatur oder bestimmter Helligkeit klappt super.
Nun würde ich mir noch gerne eine E-Mail schicken lassen, wenn die Windstärke 9 bft bzw. 75 km/h erreicht.
Die Beiträge #61, #62 und #63 fassen zusammen, wie die Programmierung derzeit aussieht.
Ich weiß jetzt allerdings nicht, wo und wie ich die Programmierung für die E-Mail bei Erreichen der genannten Windstärke programmiert werden muss.
Das Wie würde ich aus der obengenannten Programmierung ableiten. Aber über das Wo bin ich mir nicht bewusst.
Danke für Eure Hilfe,
Mandel
Wäre deutlich einfacher du würdest ein aktuelles list posten...
...ansonsten müssen wir zusammensuchen (mit der Gefahr es doch anders "zusammenzubauen" wie du es tatsächlich hast)... :-\
Gruß, Joachim
Ok, ich dachte, es wäre so einfacher ... Aber wenn ich mal denke ...
Wetterstation List:
help
Internals:
DEF 6808C9
FUUID 60b6a9be-f33f-6379-94dd-4d1a2074f34443e8
HMLANGW_MSGCNT 1404
HMLANGW_RAWMSG 050000378E86706808C900000000965883B3C08544EED1
HMLANGW_RSSI -55
HMLANGW_TIME 2021-08-18 10:38:00
IODev HMLANGW
LASTInputDev HMLANGW
MSGCNT 1404
NAME Wetterstation
NR 87
NTFY_ORDER 50-Wetterstation
STATE Temperatur: 15 °C, Feuchtigkeit: 88 %, Helligkeit: 209, Regen: 279.365 mm/qm, Wind: 13.3 km/h, Richtung: NNW; ⬊
TYPE CUL_HM
chanNo 01
disableNotifyFn 1
lastMsg No:8E - t:70 s:6808C9 d:000000 00965883B3C08544EED1
protCmdPend 3 CMDs_pending
protLastRcv 2021-08-18 10:38:00
protRcv 1404 last_at:2021-08-18 10:38:00
protState CMDs_pending
rssi_at_HMLANGW cnt:1404 min:-59 max:-53 avg:-56.36 lst:-55
CL:
Authenticated 0
BUF
FD 16
FW_ID 3863
LASTACCESS 1629276007
NAME WEB_192.168.178.203_50279
NR 3865
PEER 192.168.178.203
PORT 50279
SNAME WEB
SSL
STATE Connected
TEMPORARY 1
TYPE FHEMWEB
canAsyncOutput 1
READINGS:
2021-08-18 10:40:03 state Connected
READINGS:
2021-06-06 12:34:49 D-firmware 1.6
2021-06-06 12:34:49 D-serialNr PEQ0001456
2021-08-15 23:10:52 IODev HMLANGW
2021-06-07 16:19:47 LuftdruckHpa 0
2021-06-07 16:19:47 RegenGesamtMm 0
2021-06-07 16:19:47 RegenMm 0
2021-06-07 16:19:47 TaupunktTempC -17.8
2021-06-07 16:19:47 TemperaturC -4.1
2021-06-07 16:19:47 TemperaturGefuehltC -17.8
2021-06-07 16:19:47 WindKm 6.8
2021-06-07 16:19:47 WindboeenKm 0.0
2021-06-07 16:19:47 WindrichtungGrad -180
2021-08-18 10:38:00 battery ok
2021-08-18 10:38:00 brightness 209
2021-08-15 23:11:55 cfgState updating
2021-08-15 23:11:55 commState CMDs_pending
2021-08-18 10:38:00 humidity 88
2021-08-18 10:38:00 isRaining 1
2021-06-02 07:35:17 peerList 13D5A503
2021-06-06 12:36:20 powerOn 2021-06-06 12:36:20
2021-08-18 10:38:00 rain 279.365
2021-06-06 12:36:20 recentStateType info
2021-08-18 10:38:00 state T: 15 H: 88 W: 13.3 R: 279.365 IR: 1 WD: 340 WDR: 67.5 S: 238 B: 209
2021-08-18 10:38:00 sunshine 238
2021-08-18 10:38:00 temperature 15
2021-06-06 12:36:20 unknown 06000030
2021-08-18 10:38:00 windDirRange 67.5
2021-08-18 10:38:00 windDirection 340
2021-08-18 10:38:00 windDirectionIcon ⬊
2021-08-18 10:38:00 windDirectionText NNW
2021-08-18 10:38:00 windSpeed 13.3
2021-06-07 08:09:18 winddirText N
cmdStack:
++A00125788A6808C900040000000000
##A00125788A6808C90103
##A00125788A6808C901040000000001
helper:
HM_CMDNR 142
getCfgList all
getCfgListNo ,1,4
lastMsgTm 1629275880.27979
mId 00AE
peerFriend peerAct,peerVirt
peerOpt 1p:THSensor,4:THSensor,p:THSensor
regLst 0,1,1p,4p
rxType 140
supp_Pair_Rep 0
cmds:
TmplKey :no:1629061852.60786
TmplTs 1629061852.60786
cmdKey 1:1:0::Wetterstation:00AE:01:
cmdLst:
assignHmKey noArg
burstXmit noArg
clear [(readings|trigger|register|oldRegs|rssi|msgEvents|{msgErrors}|attack|all)]
deviceRename -newName-
fwUpdate -filename- [-bootTime-]
getConfig noArg
getDevInfo noArg
getRegRaw (List0|List1|List2|List3|List4|List5|List6|List7) [-peerChn-]
peerBulk -peer1,peer2,...- [({set}|unset)]
peerChan 0 -actChn- [({single})] [({set}|unset)] [actor|remote|both]
peerSmart -peerOpt-
raw -data- [...]
regBulk -list-.-peerChn- -addr1:data1- [-addr2:data2-]...
regSet [(prep|{exec})] -regName- -value- [-peerChn-]
reset noArg
sign [(on|{off})]
tplDel -tplDel-
trgEventL -peer- -condition-
trgEventS -peer- -condition-
trgPressL [(-peer-|{all})]
trgPressS [(-peer-|{all})]
unpair noArg
lst:
condition slider,0,1,255
peer
peerOpt Charlotte_Heizungsventil_WindowRec,Charlotte_Heizungsventil_remote,Garten_links,Garten_rechts,Haustuerbeleuchtung,Hochbeet_links,Hochbeet_rechts,Markise,SchalterBeleuchtungVorgarten,Schuppen_Garten
tplDel
rtrvLst:
cmdList [({short}|long)]
deviceInfo [({short}|long)]
list [({normal}|full)]
param -param-
reg -addr- -list- [-peerChn-]
regList noArg
regTable noArg
regVal -addr- -list- [-peerChn-]
saveConfig [-filename-]
tplInfo noArg
expert:
def 0
det 0
raw 1
tpl 0
io:
flgs 0
newChn +6808C9,00,00,00
nextSend 1629275880.37452
rxt 0
vccu
p:
6808C9
00
00
00
prefIO:
mRssi:
mNo 8E
io:
HMLANGW:
-49
-49
peerIDsH:
prt:
bErr 0
sProc 2
q:
qReqConf
qReqStat
role:
chn 1
dev 1
rssi:
at_HMLANGW:
avg -56.3696581196581
cnt 1404
lst -55
max -53
min -59
tmpl:
Attributes:
IODev HMLANGW
alias Wetterstation
appOptions { "template": "thermometer"}
autoReadReg 4_reqStatus
expert rawReg
firmware 1.6
group Wetterstation
model HM-WDS100-C6-O-2
room Wetter
serialNr PEQ0001456
stateFormat Temperatur: temperature °C, Feuchtigkeit: humidity %, Helligkeit: brightness, Regen: rain mm/qm, Wind: windSpeed km/h, Richtung: windDirectionText; windDirectionIcon
subType THSensor
userReadings windDirectionText:windDirection:.* {
UConv::direction2compasspoint(ReadingsVal($name,'windDirection',0));
},
windDirectionIcon:windDirection:.* {
my $dir = ReadingsVal($name,'windDirection',0);
UConv::direction2compasspoint((($dir < 180)? $dir+180: $dir-180),3);
}
OK
Und hier die RAW-Definition der ,,Hitzeautomatik":
defmod HM_70A1CA_notify_1 notify HM_70A1CA:temperature:.* {if ($EVTPART1 >= 40 and ReadingsNum('Markise','pct',0) < 10 )\
{fhem("set Markise pct 10");;\
DebianMail('XXX@XXX.eu','Hitzewarnung - Markise fährt aus','Achtung, die Temperatur hat 40 Grad erreicht! Die Markise fährt aus.')}\
elsif ( ( ReadingsNum('Wetterstation','brightness',0) <= 200 or $hour >= 18 ) and ReadingsNum('Markise','pct',99) == 10 )\
{fhem("set Markise pct 0");;\
DebianMail('XXX@XXX.eu','Entwarnung - Markise fährt ein','Die Markise fährt wieder ein!')}\
}
attr HM_70A1CA_notify_1 alias Markise Hitze-Automatik
attr HM_70A1CA_notify_1 appOptions { \
"template": "switch",\
"home": true,\
"sortby": "2",\
"setup": {\
"status": \
{\
"bar": [\
"state:inactive:0:#DE3A1F:success", \
"state:active:100:success" \
]\
},\
"main": \
[{\
"leftBtn": "mdi-power-off" ,\
"leftClick": ["state::inactive"],\
"text": \
[\
"state:inactive:deaktiviert" ,\
"state:active:aktiviert" ,\
"state::%s"\
],\
"rightBtn": "mdi-power-on" ,\
"rightClick": ["state::active"]\
}] \
}\
}\
\
attr HM_70A1CA_notify_1 group Markise
attr HM_70A1CA_notify_1 room Markise
attr HM_70A1CA_notify_1 sortby ,,2"
attr HM_70A1CA_notify_1 webCmd active:inactive
setstate HM_70A1CA_notify_1 2021-08-18 10:42:26
setstate HM_70A1CA_notify_1 2021-08-15 23:10:44 state active
Und hier noch das List des Temperatursensors für die Hitzeautomatik, was aber ja nichts mit der E-Mail bei Sturm zu tun hat.
Ich füge das nur bei, um den Zusammenhang zur ,,Hitzeautomatik" herzustellen.
DEF 70A1CA
FUUID 5fa31fcd-f33f-ef18-0ab3-7b733ac6d85ba5b8
HMLANGW_MSGCNT 1416
HMLANGW_RAWMSG 050000318A867070A1CA00000000EF64
HMLANGW_RSSI -49
HMLANGW_TIME 2021-08-18 11:00:18
IODev HMLANGW
LASTInputDev HMLANGW
MSGCNT 1416
NAME HM_70A1CA
NR 81
NTFY_ORDER 50-HM_70A1CA
STATE T: 23.9
TYPE CUL_HM
chanNo 01
disableNotifyFn 1
lastMsg No:8A - t:70 s:70A1CA d:000000 00EF64
protCmdDel 2
protLastRcv 2021-08-18 11:00:18
protRcv 1416 last_at:2021-08-18 11:00:18
protResnd 3 last_at:2021-08-15 23:16:50
protResndFail 1 last_at:2021-08-15 23:19:10
protSnd 4 last_at:2021-08-15 23:19:04
protState CMDs_done_Errors:1
rssi_at_HMLANGW cnt:1416 min:-54 max:-47 avg:-48.83 lst:-49
CL:
Authenticated 0
BUF
FD 16
FW_ID 3900
LASTACCESS 1629277243
NAME WEB_192.168.178.203_50343
NR 3902
PEER 192.168.178.203
PORT 50343
SNAME WEB
SSL
STATE Connected
TEMPORARY 1
TYPE FHEMWEB
canAsyncOutput 1
READINGS:
2021-08-18 11:00:32 state Connected
READINGS:
2021-03-06 00:26:05 D-firmware 1.3
2021-03-06 00:26:05 D-serialNr QEQ1895228
2021-08-15 23:19:04 IODev HMLANGW
2021-08-17 23:27:43 RegL_00.
2021-08-18 11:00:18 battery ok
2021-08-15 23:11:22 cfgState updating
2021-08-15 23:19:10 commState CMDs_done_Errors:1
2021-08-18 11:00:18 state T: 23.9
2021-08-18 11:00:18 temperature 23.9
helper:
HM_CMDNR 138
cSnd 0125788A70A1CA00040000000000,0125788A70A1CA00040000000000
getCfgListNo
lastMsgTm 1629277218.58345
mId 003E
peerFriend
peerOpt p:THSensor
regLst 0
rxType 12
supp_Pair_Rep 0
cmds:
TmplKey :no:1629061852.50118
TmplTs 1629061852.50118
cmdKey 1:1:0::HM_70A1CA:003E:01:
cmdLst:
assignHmKey noArg
clear [(readings|trigger|register|oldRegs|rssi|msgEvents|{msgErrors}|attack|all)]
deviceRename -newName-
fwUpdate -filename- [-bootTime-]
getConfig noArg
getDevInfo noArg
getRegRaw (List0|List1|List2|List3|List4|List5|List6|List7) [-peerChn-]
peerBulk -peer1,peer2,...- [({set}|unset)]
peerChan 0 -actChn- [({single})] [({set}|unset)] [actor|remote|both]
raw -data- [...]
regBulk -list-.-peerChn- -addr1:data1- [-addr2:data2-]...
regSet [(prep|{exec})] -regName- -value- [-peerChn-]
reset noArg
tplDel -tplDel-
unpair noArg
lst:
condition slider,0,1,255
peer
peerOpt
tplDel
rtrvLst:
cmdList [({short}|long)]
deviceInfo [({short}|long)]
list [({normal}|full)]
param -param-
reg -addr- -list- [-peerChn-]
regList noArg
regTable noArg
regVal -addr- -list- [-peerChn-]
saveConfig [-filename-]
tplInfo noArg
expert:
def 0
det 0
raw 1
tpl 0
io:
flgs 0
newChn +70A1CA,00,00,00
nextSend 1629277218.66425
rxt 2
vccu
p:
70A1CA
00
00
00
prefIO:
mRssi:
mNo 8A
io:
HMLANGW:
-41
-41
peerIDsH:
prt:
bErr 0
sProc 0
q:
qReqConf
qReqStat
role:
chn 1
dev 1
rssi:
at_HMLANGW:
avg -48.8347457627119
cnt 1416
lst -49
max -47
min -54
tmpl:
Attributes:
IODev HMLANGW
alias Lautsprecher Terrasse
appOptions {"home": true,
"template": "thermometer",
"sortby": "2" }
autoReadReg 4_reqStatus
expert rawReg
firmware 1.3
group Temperatursensor Lautsprecher Terrasse
icon temp_temperature
model HM-WDS30-T-O
room Wetter
serialNr QEQ1895228
subType THSensor
Reicht das so aus?
Danke und viele Grüße
Mandel
Zitat von: MandelHL am 18 August 2021, 10:14:15
Nun würde ich mir noch gerne eine E-Mail schicken lassen, wenn die Windstärke 9 bft bzw. 75 km/h erreicht.
Naja dein aktuelles notify triggert ja "nur" auf Temperatur...
Also entweder auch noch auf Windstärke triggern lassen (welches Reading interessiert dich denn dann dafür?) oder ein 2tes notify (einfacher, weil sich das ja nur darum "kümmern" muss)...
-> EventMonitor öffnen, warten (oder provozieren) bis das entsprechende Event kommt -> create/modify
Und dann eben anpassen.
Also "if($EVENT > XXX){send message}"...
...oder $EVTPART1... ja nachdem...
Falls (sieht so aus) Einheiten im Reading sind, dann eben mit $EVTPART oder selber spilt...
...oder Abfrage des Readings (troz dem der Wert ja im Event mitkommt) per ReadingsNum, dann hast du nur den Zahlenwert...
(wie immer: es gibt viele Möglichkeiten)
EDIT: wenn dir das als Trigger reicht (weil du zwar auf Temperatur triggerst aber ja auch einen Zweig hast, der mit Temperatur grad gar nix macht ;) ), dann kannst du ja auch einen weiteren elsif-Zweig einbauen...
Gruß, Joachim
Jetzt wollte ich grad anschauen was du nettes gepostet hast/hattest: schwupp war es weg ;)
Poste doch ein list des neuen notify :)
Ich weiß auch nicht genau was du mit "wird als LautsprecherXXX aufgelöst" meinst...
...bzw. habe ich eben nur eine "Idee"...
Du meinst unter "Probably associated with"?
Dann hat das notify verm. keine NOTIFYDEV, das kommt wenn z.B. kein NAME im notify "aufgelöst" werden kann:
Device: Lautsprecher_Aussen
notify: define nLAlle Lautsprecher_.*:.* {} EDIT: -> wird wohl NICHT unter associated with angezeigt, da Lautsprecher_.* nicht auf ein Device passt, das dann "referenziert" werden könnte
im Gegensatz zu: define nLAlle Lautsprecher_Aussen:.* {} EDIT: -> taucht beim Device Lautsprecher_Aussen auf, da der Name Lautsprecher_Aussen "referenziert" werden kann/wird
Also falls du das gemeint hast...
...wenn nicht: keine Ahnung ;)
Gruß, Joachim
Sorry, Joachim. Ich dachte, dass das Bild nicht beigefügt war. Deshalb hier noch mal.
Danke, das hat gut geklappt.
Nun frage ich mich allerdings, wie ich das hinbekomme, dass bei dem Notify für den Lautsprecher auch der Name aufgelöst wird, so wie es bei der Wetterstation passiert.
Allerdings hatte ich das Lautsprecher Notify nicht über den EventMonitor erstellt.
Wie kann ich das nachträglich ändern? Ich habe einiges probiert und nicht hinbekommen, finde das aber übersichtlicher.
Danke noch mal und viele Grüße
Mandel
Das ist das List. Oder meinst Du etwas anderes?
Wie man das Notify listet, weiß ich nicht.
Internals:
DEF HM_70A1CA:temperature:.* {if ($EVTPART1 >= 40 and ReadingsNum('Markise','pct',0) < 10 )
{fhem("set Markise pct 10");
DebianMail('XXX@XXX.XX','Hitzewarnung - Markise fährt aus','Achtung, die Temperatur hat 40 Grad erreicht! Die Markise fährt aus.')}
elsif ( ( ReadingsNum('Wetterstation','brightness',0) <= 200 or $hour >= 18 ) and ReadingsNum('Markise','pct',99) == 10 )
{fhem("set Markise pct 0");
DebianMail('XXX@XXX.XX','Entwarnung - Markise fährt ein','Die Markise fährt wieder ein!')}
}
FUUID 607df7ed-f33f-6379-cabb-b1f5add5d425fa74
NAME HM_70A1CA_notify_1
NR 86
NTFY_ORDER 50-HM_70A1CA_notify_1
REGEXP HM_70A1CA:temperature:.*
STATE active
TYPE notify
READINGS:
2021-08-18 14:25:50 state active
Attributes:
alias Markise Hitze-Automatik
appOptions {
"template": "switch",
"home": true,
"sortby": "2",
"setup": {
"status":
{
"bar": [
"state:inactive:0:#DE3A1F:success",
"state:active:100:success"
]
},
"main":
[{
"leftBtn": "mdi-power-off" ,
"leftClick": ["state::inactive"],
"text":
[
"state:inactive:deaktiviert" ,
"state:active:aktiviert" ,
"state::%s"
],
"rightBtn": "mdi-power-on" ,
"rightClick": ["state::active"]
}]
}
}
group Markise
room Markise
sortby ,,2"
webCmd active:inactive
Ja das ist wohl ein list.
Aber von dem notify hattest du doch schon das RawDef gepostet?
Ich meinte ein list des NEUEN notify...
Bzw. verstehe ich (immer noch nicht) was du mit "Name auflösen" meinst...
EDIT: und welches notify ist denn das für den Lautsprecher?
EDIT: ich habe oben noch etwas hinzugefügt, vielleicht jetzt klarer. Vors. du meinst mit "aufgelöst" eben das "associated with"... Und wenn du ein list des notify postest, um das es dir geht, dann kann man auch helfen. So nicht...
Gruß, Joachim
Das ist der Temperatursensor über dem Lautsprecher, der mir zeigt, wie doll die Sonne auf den knallt und ob vielleicht besser die Markise zum Schutz ausfahren soll.
defmod HM_70A1CA_notify_1 notify HM_70A1CA:temperature:.* {if ($EVTPART1 >= 40 and ReadingsNum('Markise','pct',0) < 10 )\
{fhem("set Markise pct 10");;\
DAS HABE ICH JETZT WEGGELASSEN.
HIER KOMMT DANN NUR NOCH DIE ALIAS, DIE DIE ZUORDNUNG VEREINFACHT.
...
attr HM_70A1CA_notify_1 alias Markise Hitze-Automatik
Bei diesem Temperatursensor muss ich ja erst einmal nachsehen, welches Device das ist.
Da habe ich es mit dem Windsensor einfacher.
Hier hat der EventMonitor den Befehl erstellt und das Device nicht mit CUL_HM 6808C9 dargestellt, sondern ,,Wetterstation" genommen.
So ist die Zuordnung für mich natürlich schneller möglich.
defmod Wetterstation_notify_1 notify Wetterstation:windSpeed:.* {if ($EVTPART1 >= 35 ){DebianMail('XXX@XXX.XX','Sturmwarnung','Achtung, es droht Sturm!')}}
attr Wetterstation_notify_1 alias Sturmwarnung
Ich hatte gedacht ::), dass durch diese Programmierung das Device auch im Notify ,,ThermometerLautsprecher" darstellt, ist aber nicht so:
defmod ThermometerLautsprecher CUL_HM 70A1CA
attr ThermometerLautsprecher .mId 003E
attr ThermometerLautsprecher IODev HMLANGW
attr ThermometerLautsprecher alias Lautsprecher Terrasse
attr ThermometerLautsprecher appOptions {"home": true,\
"template": "thermometer",\
"sortby": "2" }\
attr ThermometerLautsprecher autoReadReg 4_reqStatus
attr ThermometerLautsprecher expert rawReg
attr ThermometerLautsprecher firmware 1.3
attr ThermometerLautsprecher group Temperatursensor Lautsprecher Terrasse
attr ThermometerLautsprecher icon temp_temperature
attr ThermometerLautsprecher model HM-WDS30-T-O
attr ThermometerLautsprecher room Wetter
attr ThermometerLautsprecher serialNr QEQ1895228
attr ThermometerLautsprecher subType THSensor
Viele Grüße
Mandel
Ich verstehe immer noch nicht was du willst/meinst.
Also Events sehen so aus (naja so ungefähr):
Devicename:Readingname:Wert
Wenn also das Device, auf dessen Events du reagieren willst XYZ statt Warngeraet heißt, dann musst du das Device eben Warngeraet nennen statt XYZ:
XYZ:ReadingOfInterest:Wert
rename XYZ Warngeraet
-> Warngeraet:ReadingOfInterest:Wert
Wenn dir also der autom. angelegte Name nicht gefällt: rename
Stört dich nun, dass das notify bzgl. Lautsprecher nicht Lautsprecher-irgendwas heißt? -> rename das notify
EDIT: also rename HM_70A1CA_notify_1 Lautsprecher_notify_1
Stört dich nun, dass das notify bzgl. Lautsprecher nicht auf Lautsprecher-irgendwas reagiert? -> rename des Homematic-Devices (nutze doch die dort "eingebaute" rename-Funktion)
EDIT: also rename HM_70A1CA Lautsprecher bzw. besser set HM_70A1CA rename Lautsprecher
EDIT: dann musst du nat. das RegEx des notify anpassen!!!
Ansonsten siehe meinen Eingangssatz und alle meine Antwortversuche zuvor: ich habe keinen Schimmer was du meinst. Solange du es nicht schaffst MIR das zu vermitteln kann ICH nicht helfen...
...vielleicht haben ja andere mitlesende eine Idee...
Gruß, Joachim
Vielen Dank, das hilft mir schon.
Ich habe erkannt, dass durch das Notify über den EventMonitor automatisch das Device umbenannt wurde, nämlich in "Wetterstation".
Das Notify lautet dann "Wetterstation_notify_1 (Sturmwarnung).
Bei dem nicht durch EventMonitor erzeugten Notify steht halt "HM_70A1CA_notify_1 (Markise Hitze Automatik)".
Das heißt, hier muss ich erst einmal checken, was "HM_70A1CA" überhaupt ist.
Siehe dazu auch mein Bild aus Beitrag #78.
Aber das mit der Rename-Funktion habe ich verstanden und versuche, das mal umzusetzen. Allerdings befürchte ich, dass sich die Änderung nicht auf "HM_70A1CA_notify_1 (Markise Hitze Automatik)" auswirken wird.
Aber ich werde es sehen.
Vielen Dank, ich mache das mit dem Rename-Befehl.
Mandel
Zitat von: MandelHL am 19 August 2021, 13:13:59
Ich habe erkannt, dass durch das Notify über den EventMonitor automatisch das Device umbenannt wurde, nämlich in "Wetterstation".
Das Notify lautet dann "Wetterstation_notify_1 (Sturmwarnung).
Das halte ich für ein Gerücht, dass der Eventmonitor-Mechanismus irgendwelche BESTEHENDEN Devices umbenennt!
Er schlägt als Name für das notify, das beim autom. Generieren erzeugt werden kann eben etwas vor, wo der Devicename des Event-erzeugenden Devices "drinsteckt", that's it.
Zitat von: MandelHL am 19 August 2021, 13:13:59
Bei dem nicht durch EventMonitor erzeugten Notify steht halt "HM_70A1CA_notify_1 (Markise Hitze Automatik)".
Das heißt, hier muss ich erst einmal checken, was "HM_70A1CA" überhaupt ist.
Ganz einfach:
list Devicename
also
list HM_70A1CA
VERY VERY BASICS von fhem... ;)
Zitat von: MandelHL am 19 August 2021, 13:13:59
Aber das mit der Rename-Funktion habe ich verstanden und versuche, das mal umzusetzen. Allerdings befürchte ich, dass sich die Änderung nicht auf "HM_70A1CA_notify_1 (Markise Hitze Automatik)" auswirken wird.
Wenn du
rename HM_70A1CA_notify_1 AndererName_notify_1
eingibst (wobei ich immer nicht verstehe wo das in Klammern her kommt, also Markise Hitze Automatik, weil es im Devicename KEIN Leerzeichen [und keine Klammern] geben KANN!)
dann heißt das notify einfach anders.
Es wird weiterhin auf Events vom Device HM_70A1CA reagieren die "temperature" enthalten (also mit der notify RegEx "matchen")...
Wenn du das Device, welches die Events erzeugt (also HM_70A1CA) umbenennst und da es sich (verm.) um ein Homematic Device handelt besser DESSEN rename verwenden!
(also set HM_70A1CA rename NeuerName)
Dann MUSST du auch die RegEx des notify anpassen!!
Weil ja der Event ganz anders aussieht!!
(siehe oben)
Also wenn du das Device umbenennst, das die Events erzeugt, dann wird das notify NICHT mehr reagieren!
Wenn du nur das notify selbst umbenennst, dann ändert sich nichts, außer, dass eben das notify anders heißt... 8)
EDIT: was hat es mit deiner "defmod-Anpassung" (ich nehme an RawDef) in Antwort #81 auf sich? Hast du das Device HM_70A1CA mittes RawDef "bearbeitet"? Ich weiß ja nicht genau was du getan hast aber das ist NICHT der Weg bei einem Device den Namen zu ändern!! Du hast jetzt verm. 2 Devices, die irgendwie mit dem tatsächlichen Homematic-Gerät (also das tatsächlich "physische") "verbunden" sind. Bin nicht sicher wie sich das auswirkt! Besser wirklich etwas fhem Basics lernen, sonst kannst du dir 1. dein System ganz schnell "kaputt schießen" und 2. musst du dann nicht wegen so einfacher/basic Sachen (immer wieder) hier aufschlagen... Nix für ungut...
EDIT: bei
list TYPE=CUL_HM
tauchen da beide auf, also 1x HM_70A1CA und 1x ThermometerLautsprecher ? -> das ist schlecht! Wenn nur ThermometerLautsprecher auftaucht, dann hast du (teilweise) umbenamst irgendwie aber fragwürdig. Wenn nur HM_70A1CA (evtl. mit mehreren Kanälen/Channel), dann hattest du offenbar Glück und kannst ja jetzt mit rename anpassen wie du willst... Aber: vergiss nicht die RegEx des notify! Weil das dann eben nicht mehr funktioniert... Also anpassen oder neu anlegen (lassen)...
Gruß, Joachim
Zitat(wobei ich immer nicht verstehe wo das in Klammern her kommt, also Markise Hitze Automatik, weil es im Devicename KEIN Leerzeichen [und keine Klammern] geben KANN!)
Das kann ich beantworten :)
Das ist der alias des notify ;D
Zitat von: TomLee am 19 August 2021, 15:53:56
Das kann ich beantworten :)
Das ist der alias des notify ;D
Dachte ich mir schon ;)
(verwirrt an der Stelle aber mehr als es hilft ;) )
Gruß, Joachim
Hallo,
Danke für Eure Unterstützung. Nun habe ich das ganze aus den Augen verloren, was dazu geführt hat, dass der Lautsprecher nun doch mehr als 60 Grad ausgesetzt war, weil das automatische Ausfahren der Markise nicht mehr funktioniert hat.
Zitatalso
Code: [Auswählen]
list HM_70A1CA
VERY VERY BASICS von fhem... ;)
Dieses List führt zu dem Ergebnis
"No device named HM_70A1CA"
Es scheint, dass ich da wohl was zerschossen habe, oder?
"list ThermometerLautsprecher" führt hingegen dazu:
Internals:
DEF 70A1CA
FUUID 5fa31fcd-f33f-ef18-0ab3-7b733ac6d85ba5b8
HMLANGW_MSGCNT 492
HMLANGW_RAWMSG 05000033CA867070A1CA00000000ED64
HMLANGW_RSSI -51
HMLANGW_TIME 2021-09-02 10:50:53
IODev HMLANGW
LASTInputDev HMLANGW
MSGCNT 492
NAME ThermometerLautsprecher
NR 81
NTFY_ORDER 50-ThermometerLautsprecher
STATE T: 23.7
TYPE CUL_HM
chanNo 01
disableNotifyFn 1
lastMsg No:CA - t:70 s:70A1CA d:000000 00ED64
protCmdDel 2
protLastRcv 2021-09-02 10:50:53
protRcv 492 last_at:2021-09-02 10:50:53
protResnd 3 last_at:2021-09-01 14:10:57
protResndFail 1 last_at:2021-09-01 14:13:43
protSnd 4 last_at:2021-09-01 14:13:38
protState CMDs_done_Errors:1
rssi_at_HMLANGW cnt:492 min:-54 max:-50 avg:-51.96 lst:-51
READINGS:
2021-03-06 00:26:05 D-firmware 1.3
2021-03-06 00:26:05 D-serialNr QEQ1895228
2021-09-01 14:13:38 IODev HMLANGW
2021-09-01 18:17:37 RegL_00.
2021-09-02 10:50:53 battery ok
2021-09-01 14:05:40 cfgState updating
2021-09-01 14:13:43 commState CMDs_done_Errors:1
2021-09-02 10:50:53 state T: 23.7
2021-09-02 10:50:53 temperature 23.7
helper:
HM_CMDNR 202
cSnd 0125788A70A1CA00040000000000,0125788A70A1CA00040000000000
getCfgListNo
lastMsgTm 1630572653.7149
mId 003E
peerFriend
peerOpt p:THSensor
regLst 0
rxType 12
supp_Pair_Rep 0
cmds:
TmplKey :no:1630512816.6876
TmplTs 1630512816.6876
cmdKey 1:1:0::ThermometerLautsprecher:003E:01:
cmdLst:
assignHmKey noArg
clear [(readings|trigger|register|oldRegs|rssi|msgEvents|{msgErrors}|attack|all)]
deviceRename -newName-
fwUpdate -filename- [-bootTime-]
getConfig noArg
getDevInfo noArg
getRegRaw (List0|List1|List2|List3|List4|List5|List6|List7) [-peerChn-]
peerBulk -peer1,peer2,...- [({set}|unset)]
peerChan 0 -actChn- [({single})] [({set}|unset)] [actor|remote|both]
raw -data- [...]
regBulk -list-.-peerChn- -addr1:data1- [-addr2:data2-]...
regSet [(prep|{exec})] -regName- -value- [-peerChn-]
reset noArg
tplDel -tplDel-
unpair noArg
lst:
condition slider,0,1,255
peer
peerOpt
tplDel
rtrvLst:
cmdList [({short}|long)]
deviceInfo [({short}|long)]
list [({normal}|full)]
param -param-
reg -addr- -list- [-peerChn-]
regList noArg
regTable noArg
regVal -addr- -list- [-peerChn-]
saveConfig [-filename-]
tplInfo noArg
expert:
def 0
det 0
raw 1
tpl 0
io:
flgs 0
newChn +70A1CA,00,00,00
nextSend 1630572653.80889
rxt 2
vccu
p:
70A1CA
00
00
00
prefIO:
mRssi:
mNo CA
io:
HMLANGW:
-45
-45
peerIDsH:
prt:
bErr 0
sProc 0
q:
qReqConf
qReqStat
role:
chn 1
dev 1
rssi:
at_HMLANGW:
avg -51.9613821138212
cnt 492
lst -51
max -50
min -54
tmpl:
Attributes:
IODev HMLANGW
alias Lautsprecher Terrasse
appOptions {"home": true,
"template": "thermometer",
"sortby": "2" }
autoReadReg 4_reqStatus
expert rawReg
firmware 1.3
group Temperatursensor Lautsprecher Terrasse
icon temp_temperature
model HM-WDS30-T-O
room Wetter
serialNr QEQ1895228
subType THSensor
Zitat
Wenn du
Code: [Auswählen]
rename HM_70A1CA_notify_1 AndererName_notify_1
eingibst (wobei ich immer nicht verstehe wo das in Klammern her kommt, also Markise Hitze Automatik, weil es im Devicename KEIN Leerzeichen [und keine Klammern] geben KANN!)
dann heißt das notify einfach anders.
Das hat geklappt. Nun steht da bei "Probably associated with"
"LautsprecherTerrasse_notify_1 (Marksie Hitze-Automatik)"
In Klammern steht das Alias, wie TomLee geschrieben hat.
Das ist das List von "LautsprecherTerrasse_notofy_1":
Internals:
DEF HM_70A1CA:temperature:.* {if ($EVTPART1 >= 40 and ReadingsNum('Markise','pct',0) < 10 )
{fhem("set Markise pct 10");
DebianMail('XXX@XXX.XX','Hitzewarnung - Markise fährt aus','Achtung, die Temperatur hat 40 Grad erreicht! Die Markise fährt aus.')}
elsif ( ( ReadingsNum('Wetterstation','brightness',0) <= 200 or $hour >= 18 ) and ReadingsNum('Markise','pct',99) == 10 )
{fhem("set Markise pct 0");
DebianMail('XXX@XXX.XX','Entwarnung - Markise fährt ein','Die Markise fährt wieder ein!')}
}
FUUID 607df7ed-f33f-6379-cabb-b1f5add5d425fa74
NAME LautsprecherTerrasse_notify_1
NR 86
NTFY_ORDER 50-LautsprecherTerrasse_notify_1
REGEXP HM_70A1CA:temperature:.*
STATE active
TYPE notify
READINGS:
2021-09-02 10:56:40 state active
Attributes:
alias Markise Hitze-Automatik
appOptions {
"template": "switch",
"home": true,
"sortby": "2",
"setup": {
"status":
{
"bar": [
"state:inactive:0:#DE3A1F:success",
"state:active:100:success"
]
},
"main":
[{
"leftBtn": "mdi-power-off" ,
"leftClick": ["state::inactive"],
"text":
[
"state:inactive:deaktiviert" ,
"state:active:aktiviert" ,
"state::%s"
],
"rightBtn": "mdi-power-on" ,
"rightClick": ["state::active"]
}]
}
}
group Markise
room Markise
sortby ,,2"
webCmd active:inactive
Diese Funktion geht im Moment aber nicht, so dass die Markise trotz der Voraussetzungen von Temperatur und Helligkeit nicht reagiert.
Dass die Funktion nicht mehr geht, hast Du, MadMax, hier ja quasi geschrieben:
Wenn du das Device, welches die Events erzeugt (also HM_70A1CA) umbenennst und da es sich (verm.) um ein Homematic Device handelt besser DESSEN rename verwenden!
(also set HM_70A1CA rename NeuerName)
Dann MUSST du auch die RegEx des notify anpassen!!
Weil ja der Event ganz anders aussieht!!
(siehe oben)
Also wenn du das Device umbenennst, das die Events erzeugt, dann wird das notify NICHT mehr reagieren!
Wenn du nur das notify selbst umbenennst, dann ändert sich nichts, außer, dass eben das notify anders heißt... 8)
Ich frage mich allerdings, wie ich das jetzt noch retten kann bzw. wie ich das RexEx des notify anpassen kann.
ZitatEDIT: bei
Code: [Auswählen]
list TYPE=CUL_HM
ergibt:
ActionDetector
Bewegungssensor_1
Bewegungssensor_2
Charlotte_Heizungsventil
Charlotte_Heizungsventil_Clima
Charlotte_Heizungsventil_ClimaTeam
Charlotte_Heizungsventil_Climate
Charlotte_Heizungsventil_Weather
Charlotte_Heizungsventil_WindowRec
Charlotte_Heizungsventil_remote
Garten_links
Garten_rechts
HM_4DD7D7
Haustuerbeleuchtung
Hochbeet_links
Hochbeet_rechts
Markise
SchalterBeleuchtungVorgarten
Schuppen_Garten
Sensor_Badezimmerfenster_EG
Sensor_Haustuer
Sensor_Kellertuer
Sensor_Schlafzimmerfenster
ThermometerLautsprecher
Wetterstation
Ich weiß, dass Ihr Recht habt, dass ich mich in den Basics mehr belesen muss.
Es wäre trotzdem super, wenn Ihr mir noch einmal helfen könntet, damit erst einmal die Markise wieder auf das Thermometer in Verbindung mit Helligkeit und Uhrzeit reagiert.
Vielen Dank,
Mandel
Notify anpassen: auf DEF des notify klicken und Trigger-Regex anpassen...
Alternativ den Ausführungsteil des aktuellen notify kopieren/merken.
Notify löschen und mit dem Eventmonitor ein neues/passendes anlegen (lassen)...
Oder (noch besser): (endlich) fhem-Grundlagen aneignen...
Gruß, Joachim
ZitatAlternativ den Ausführungsteil des aktuellen notify kopieren/merken.
Notify löschen und mit dem Eventmonitor ein neues/passendes anlegen (lassen)...
Danke, über diesen Weg hat es perfekt geklappt ...
Hallo alle,
ich versuche hier auch einen Alarm für eine Unterschreitung der Aussentemperatur per Mail abzusetzen. Das mit dem Mail senden habe ich hingekriegt und mit der Kommandozeile überprüft.
Leider werden aber keine Alarme aus dem notify weitergereicht - Ich habe zu Testzwecken 20 Grad eingeben. Wenn's mal funktioniert soll es eine Frostwarnung geben.
defmod Temperaturalarm notify Mean_Temp_outside:state:.* {if ($EVTPART1 <= 20 ){DebianMail('xxx@xx.xx','Temperaturwarnung','Achtung, die Aussentemperatur in Bern hat 20 Grad unterschritten!')}}
attr Temperaturalarm alias Temperaturwarnung
attr Temperaturalarm disabledAfterTrigger 3600
attr Temperaturalarm room Weather
setstate Temperaturalarm active
setstate Temperaturalarm 2021-10-07 17:12:31 state active
Der Temperatursensor ist folgendermassen definiert:
defmod Mean_Temp_outside DOIF ##
attr Mean_Temp_outside devStateStyle style="text-align:right"
attr Mean_Temp_outside genericDeviceType TemperatureSensor
attr Mean_Temp_outside homebridgeMapping CurrentTemperature=state
attr Mean_Temp_outside room Homekit,Sensors
attr Mean_Temp_outside state {(sprintf("%.1f",([HM_WDS100:temperature]+[Garten:ambient_temperature-temperature]+[Terrasse:ambient_temperature-temperature])/3))}
setstate Mean_Temp_outside 8.0
setstate Mean_Temp_outside 2021-02-03 18:41:36 cmd 0
setstate Mean_Temp_outside 2021-02-03 18:41:36 mode enabled
setstate Mean_Temp_outside 2021-10-08 11:04:04 statStateDay Min: 6.0 Avg: 6.5 Max: 8.0
setstate Mean_Temp_outside 2021-10-07 23:59:55 statStateDayLast Min: 7.0 Avg: 10.9 Max: 15.8
setstate Mean_Temp_outside 2021-10-08 11:04:04 statStateHour Min: 7.3 Avg: 7.4 Max: 8.0
setstate Mean_Temp_outside 2021-10-08 10:59:55 statStateHourLast Min: 7.3 Avg: 7.3 Max: 7.3
setstate Mean_Temp_outside 2021-10-08 11:04:04 statStateMonth Min: 6.0 Avg: 13.6 Max: 28.1
setstate Mean_Temp_outside 2021-09-30 23:59:55 statStateMonthLast Min: 11.1 Avg: 17.6 Max: 33.5
setstate Mean_Temp_outside 2021-10-08 10:59:55 statStateTendency 1h: +0.0 2h: +0.6 3h: +1.0 6h: +1.3
setstate Mean_Temp_outside 2021-10-08 11:04:04 statStateYear Min: -1.0 Avg: 0.0 Max: 37.7
setstate Mean_Temp_outside 2021-10-08 11:04:04 state 8.0
Hi,
da gibt es hier eine nette Hilfe (https://wiki.fhem.de/wiki/Notify#Mein_notify_geht_nicht_-_wie_kann_ich_mir_selbst_helfen:_Debugging).
Ich vermute der Event (Trigger) stimmt so nicht. normalerweise steht state nicht im Event.
In deinem Fall würde ich beim notify zum attribute addStateEvent raten. Oder besser Du hast einen eindeutigen Event, ist aber bei dem Device unwarscheinlich.
https://fhem.de/commandref_modular.html#notify
Aber warum extra notify? Mach das doch in dem DOIF? ::)
Gruß Otto
Danke für den Tip - ich habe es mit DOIF lösen können.
Die Definition schaut so aus:
defmod Temperatur_alarm DOIF ([Mean_Temp_outside:state] < 5.0) ({ DebianMail('xx@xx.xx','FHEM-Temperatur-Alarm','ACHTUNG - die Außentemperatur ist unter 5 Grad gefallen! Die aktuelle Temperatur ist: [Mean_Temp_outside:state] °C');; })
attr Temperatur_alarm room Weather
setstate Temperatur_alarm initialized
setstate Temperatur_alarm 2021-10-11 10:38:14 cmd 0
setstate Temperatur_alarm 2021-10-11 10:38:14 mode enabled
setstate Temperatur_alarm 2021-10-11 10:38:14 state initialized
Ich hätte da jetzt noch eine Nachfolgefrage - wie kann ich das steuern dass ich diese Nachricht nur einmal täglich erhalte?
Zitat von: uwirt am 11 Oktober 2021, 11:31:42
Ich hätte da jetzt noch eine Nachfolgefrage - wie kann ich das steuern dass ich diese Nachricht nur einmal täglich erhalte?
einfach
DOELSEIF([00:00])
dranhängen.
So?
([Mean_Temp_outside:state] < 10.0) ({ DebianMail('xx@xx.xx','FHEM-Temperatur-Alarm','ACHTUNG - die Außentemperatur ist unter 3 Grad gefallen! Die aktuelle Temperatur ist: [Mean_Temp_outside:state] °C');; }) DOELSEIF([00:00])
Readings:
setstate Temperaturalarm initialized
setstate Temperaturalarm 2021-10-11 15:40:21 Device Mean_Temp_outside
setstate Temperaturalarm 2021-10-11 15:36:57 cmd 0
setstate Temperaturalarm 2021-10-11 15:40:21 e_Mean_Temp_outside_state 20.7
setstate Temperaturalarm 2021-10-11 15:36:57 mode enabled
setstate Temperaturalarm 2021-10-11 15:36:57 state initialized
setstate Temperaturalarm 2021-10-11 15:36:57 timer_01_c02 12.10.2021 00:00:00
Ich erhalte trotzdem bei Unterschreitung der Temperatur etwa alle zwei Minuten eine Meldung per Mail:
defmod Temperaturalarm DOIF ([Mean_Temp_outside:state] < 3.0) ({ DebianMail('xx@xx.xx','FHEM-Temperatur-Alarm','ACHTUNG - die Außentemperatur in Saanenmoeser ist unter 3 Grad gefallen! Die aktuelle Temperatur ist: [Mean_Temp_outside:state] °C');;;; }) DOELSEIF([00:00])
attr Temperaturalarm disable 0
attr Temperaturalarm room Weather
setstate Temperaturalarm cmd_1
setstate Temperaturalarm 2021-11-05 08:53:34 Device Mean_Temp_outside
setstate Temperaturalarm 2021-11-05 08:53:35 cmd 1
setstate Temperaturalarm 2021-11-05 08:53:35 cmd_event Mean_Temp_outside
setstate Temperaturalarm 2021-11-05 08:53:35 cmd_nr 1
setstate Temperaturalarm 2021-11-05 08:53:34 e_Mean_Temp_outside_state -0.3
setstate Temperaturalarm 2021-11-05 08:45:33 mode enabled
setstate Temperaturalarm 2021-11-05 08:53:35 state cmd_1
setstate Temperaturalarm 2021-11-05 08:53:03 timer_01_c02 06.11.2021 00:00:00
... ich glaube ich habe den Fehler gefunden - es waren vermutlich zu viele von den Strichpunkten die sich beim copy/paste angesammelt hatten:
...state] °C');;;; }) DOEL...
Hallo,
Ich habe auch noch einmal eine Frage dazu.
Ich habe es so programmiert, dass bei >40 Grad die Markise auf Position 10 ausfährt. Sollte es nach 18 Uhr sein oder der Helligkeitswert 190 unterschreiten, fährt sie wieder ein.
Dazu bekomme ich eine E-Mail, sowohl beim Aus- als auch beim Einfahren. In der Mail beim Einfahren wird mir zudem die aktuelle Temperatur angezeigt.
Ich würde mir auch gerne den Helligkeitswert anzeigen lassen. Das klappt aber nicht.
Offensichtlich habe ich es mir zu einfach gemacht, indem ich einfach 'brightness:state" eingetragen habe.
Ich bin davon ausgegangen, dass dieser Helligkeitswert durch die Abfrage <190 bekannt ist.
Aber so funktioniert es nicht.
Hat jemand einen Tipp für mich?
defmod ThermometerLautsprecher_notify_1 notify ThermometerLautsprecher:T:.* {if ($EVTPART1 >= 40 and ReadingsNum('Markise','pct',0) < 10 )\
{fhem("set Markise pct 10");;\
DebianMail('XXXXXX@XXXX.eu','Hitzewarnung - Markise fährt aus','Achtung, die Temperatur hat 40 Grad erreicht! Die Markise fährt aus. Der Helligkeitswert beträgt [brightness:state].')}\
elsif ( ( ReadingsNum('Wetterstation','brightness',0) <= 190 or $hour >= 18 ) and ReadingsNum('Markise','pct',99) == 10 )\
{fhem("set Markise pct 0");;\
DebianMail('XXXXXX@XXXX.eu','Entwarnung - Markise fährt ein','Die Markise fährt wieder ein! Der Helligkeitswert beträgt [brightness:state]. Die Temperatur beträgt '.$EVTPART1.' Grad.')}\
}
setstate ThermometerLautsprecher_notify_1 2022-04-14 14:03:14
setstate ThermometerLautsprecher_notify_1 2022-04-13 11:53:08 state active
setstate ThermometerLautsprecher_notify_1 2022-04-14 14:03:14 triggeredByDev ThermometerLautsprecher
setstate ThermometerLautsprecher_notify_1 2022-04-14 14:03:14 triggeredByEvent T: 25.1
Danke und viele Grüße
Mandel
Zitat von: MandelHL am 14 April 2022, 14:12:16
Ich bin davon ausgegangen, dass dieser Helligkeitswert durch die Abfrage <190 bekannt ist.
Der Wert wird aber doch nur abgefragt und nicht irgendwo in dem Code-Schnipsel (zwischen-) gespeichert...
Ergo: Entweder in eine Variable einlesen und das so ähnlich lösen wie mit "Grad", oder eben versuchen, das auf andere Weise zu umschiffen.
Falls (!) deine DebianMail "replace magic" überhaupt unterstützt, wäre das hier ggf. möglich (statt deines "verhauenen" Verweises):
[Wetterstation:brightness]
debianmail ist eine Perlfunction. Da geht nur ReadingsVal('Wetterstation','brightness','')
Nicht schön aber mit Kettenbildung (ungetestet)
DebianMail('XXXXXX@XXXX.eu','Entwarnung - Markise fährt ein','Die Markise fährt wieder ein! Der Helligkeitswert beträgt '.ReadingsVal('Wetterstation','brightness','').'. Die Temperatur beträgt '.$EVTPART1.' Grad.')}
Zitat"replace magic"
wäre ein verstecktes Easteregg ;D ;D ;D
Zitat von: Otto123 am 14 April 2022, 21:20:16
debianmail ist eine Perlfunction. Da geht nur ReadingsVal('Wetterstation','brightness','')
Eben. Da kann man ja durchaus für den zu versendenden Text "ReplaceSetMagic($$@)" aus fhem.pl aufrufen (#1883)
Zitat
wäre ein verstecktes Easteregg ;D ;D ;D
Vielleicht magst du es verstecken...?!?
(Aber bitte erst testen...)
Da hast Du mich ganz schön auf Ostereiersuche geschickt ;)
Ich habe keine Dokumentation zu dieser Funktion gefunden, nicht mal ein Kommentar in der fhem.pl, der dort erwähnte Forenthread startet auf einem Level wo sich mir der Grundsyntax auch nicht erschließt.
Ich bin kurz zu den oft erwähnten msg (xxx) Funktionen gewandert - auch da keine Doku aber dafür ein schwindelerregender Thread.
Dann habe ich überlegt, als würgaround ein Dummy "Mail" Device mit set Befehlen zu füttern und die debianmail Funktion per userReadings zu triggern ;)
Am Ende hab ich mir nochmal die fhem.pl angeschaut und folgende "Idee" abgeschaut und getestet:
(undef, $subject) = ReplaceSetMagic(undef, 1, $subject);
(undef, $text) = ReplaceSetMagic(undef, 1, $text);
Funktioniert ;D - aber ist es wirklich das, was ich wieder ohne weiteren Kommentar im Wiki verstecken soll?
Zitat von: Otto123 am 17 April 2022, 00:26:46
Da hast Du mich ganz schön auf Ostereiersuche geschickt ;)
::) Das Stichwort hattest du selbst geliefert, und für "große Kinder" soll Ostereier suchen ja andererseits auch nicht zu einfach sein :P ...
ZitatFunktioniert ;D - aber ist es wirklich das, was ich wieder ohne weiteren Kommentar im Wiki verstecken soll?
Na ja - ich glaube nicht, dass so eine zentrale Funktion großen Änderungen unterworfen ist, von daher könnte man das schon machen. Aber im Zweifel hast du recht: Man sollte wenn, dann sehr bewußt auf diese zwei Zeilen eingehen (ggf. die Ergänzung in einer Info-Box unterbringen?), und eigentlich die User eher darauf "schubsen", dass der (m.E.) bessere Weg der ist, den Umweg über die "msg"-Funktion zu nutzen - dann kann man nämlich später viel einfacher entscheiden, ob man "schwierige" Infos eher per Mail oder per Telegram/Signal/whatever haben will (und/oder per TTS-System ausgegeben, weil der User grade da ist...). (Auch dazu gibt es afaik keine wirklich gute Doku).
Apropos Sprachausgabe: Ich kenne die Funktion auch nur deswegen näher, weil es einen "Klon" davon in RHASSPY gibt/schon immer gab (und sich Perlcritic über die darin enthaltenen "nested subroutines" beklagt hat)....
naja wenn Du erstmal nichts an meinem "adaptierten" Anwendungsbeispiel von evalStateFormat($) zu meckern hast, mach ich das mal so ;)
;D ;D ;D
Zitat von: Otto123 am 17 April 2022, 09:13:25
naja wenn Du erstmal nichts an meinem "adaptierten" Anwendungsbeispiel von evalStateFormat($) zu meckern hast
...damit das "nicht meckern" nicht falsch verstanden wird: Ich habe da NICHTS gegengecheckt, sondern wollte nur den Hinweis geben, dass "das ist Perl-Code" an sich kein Hindernis ist, um "Replace Magic" (oder wie auch immer man das nennen möchte) trotzdem zu haben...
Wie gesehen: Es funktioniert, aber damit ist eben nicht gesagt, dass es "gut" (oder empfehlenswert) ist (ich _glaube_ aber, dass es unproblematisch sein sollte; das ist aber eben "Bauchgefühl" :P ...).