hallo,
ich habe ein problem und komme nicht weiter...
ich habe max eq-3 thermostate, hier möchte ich auslesen die desiredTemp, aus den MAx Fensterkontakten möchte ich Offne oder Geschlossen auslesen und je nach status einem Dummy einen Wert zu weisen, der dann meine Heizung einschaltet oder nicht...
das Problem ist, dass erstens die Fensterkontakte nicht immer "opened" bzw. "closed" melden sondern auch "opened (rf error)" oder "closed (rf error)" und 2. bekomme ich vereinzelt das problem das nicht der Wert des Readings zugewiesen wird sondern die "funktion" die das beschreibt...
Ich habe das auch bereits mit DOIF und notify versucht.. beides kein erfolg.. bin etwas am verzweifeln weil immer wieder die heizung entweder kalt bleibt oder sich ungewollt einschaltet...
das Noify sah so aus
MAX_014030.* {
if(($EVENT cmp "closed")) {$EVENT=~s/://;; fhem("setreading BadRoom $EVENT");; my $BadRoomT= sprintf("%.0f",ReadingsVal("MAX_1a7298","desiredTemperature",0));; fhem("defmod BadRoomT set BadRoom desired-temp $BadRoomT") }
if(($EVENT cmp "open")) {fhem ("set BadRoom desired-temp 16") ;}
}
das DOIF pandant sah so aus
([MAX_014030:state] cmp "opened") (set BadRoom desired-temp 16)
DOELSEIF (([MAX_014030:state] cmp "closed") and ([BadRoom:desired-temp] eq "19")) (defmod BadRoomTmp at +00:01:00 set BadRoom desired-temp sprintf("%.0f",ReadingsVal("MAX_1a7298","desiredTemperature",0)))
DOELSE ()
bzw. hab ichs auch so versucht
([MAX_0cfe41:state] eq "opened") (set WZRoom desired-temp 16)
DOELSEIF (([MAX_0cfe41:state] ne "opened") and ([WZRoom:desired-temp] eq "19")) {$EVENT=~s/://;; fhem("setreading WZRoom $EVENT");; my $WZRoomT= sprintf("%.0f",ReadingsVal("MAX_093d8a","desiredTemperature",0));; fhem("defmod WZRoomTmp at +00:02:00 set WZRoom desired-temp $WZRoomT")}
DOELSE ()
und bekam das hier als ergäbnis:
NAME BadRoom
NR 494
STATE desired-temp sprintf("%.0f",ReadingsVal("MAX_1a7298","desiredTemperature",0))
TYPE dummy
was mach ich falsch???
dannke
Also aus dem was ich verstehe, denke ich so:
([MAX_0cfe41:state] eq "opened") (set WZRoom desired-temp 16)
DOELSEIF (([MAX_0cfe41:state] ne "opened") and ([WZRoom:desired-temp] eq "19")) (setreading WZRoom desired-temp [MAX_093d8a:desiredTemperature])
Aber der Dummy den Du zeigst heisst BadRoom - der kommt in deinem letzten Code gar nicht vor.
Kann also sein Du musst das korrigieren.
guten morgen Otto123,
sorry, der letzte code ist ein beispiel eines anderen Thermometers, Fensterkontakts und DUmmy aber die hab ich 5x in der Ausführung, sind alle gleich aufgebaut...
für die Richtigkeit, hier die Codes aus der fhem.cfg die ich eingebaut habe....
define BadfensteLI_n notify MAX_014030.* {\
if(($EVENT cmp "closed")) {$EVENT=~s/://;;;; fhem("setreading BadRoom $EVENT");;;; my $BadRoomT= sprintf("%.0f",ReadingsVal("MAX_1a7298","desiredTemperature",0));;;; fhem("defmod BadRoomT set BadRoom desired-temp $BadRoomT") }\
if(($EVENT cmp "open")) {fhem ("set BadRoom desired-temp 16") ;;}\
}
setuuid BadfensteLI_n 5e58bee6-f33f-5975-ace6-09fa52dccc03ae1e
attr BadfensteLI_n disable 1
attr BadfensteLI_n room notify,31_MAX!
define BadfensterRE_n notify MAX_013c1d.* {\
if(($EVENT cmp "closed")) {$EVENT=~s/://;;;; fhem("setreading BadRoom $EVENT");;;; my $BadRoomT= sprintf("%.0f",ReadingsVal("MAX_1a7298","desiredTemperature",0));;;; fhem("defmod BadRoomT at +00:02:00set BadRoom desired-temp $BadRoomT") }\
if(($EVENT cmp "open")) {fhem ("set BadRoom desired-temp 16") ;;}\
}
setuuid BadfensterRE_n 5e58c041-f33f-5975-32f2-c9c1fecb2bcad0a2
attr BadfensterRE_n disable 1
attr BadfensterRE_n room 31_MAX!,notify
define Kidsfenster_n notify MAX_0fe059.* {\
if(($EVENT cmp "closed")) {$EVENT=~s/://;;;; fhem("setreading KidsRoom $EVENT");;;; my $KidsRoomT= sprintf("%.0f",ReadingsVal("MAX_1a7291","desiredTemperature",0));;;; fhem("defmod KidsRoomT at +00:02:00set KidsRoom desired-temp $KidsRoomT") }\
if(($EVENT cmp "opened")) {fhem ("set KidsRoom desired-temp 16") ;;}\
}
setuuid Kidsfenster_n 5e58c0ee-f33f-5975-c6a8-06ea334ff8a528e4
attr Kidsfenster_n disable 1
attr Kidsfenster_n room 31_MAX!,notify
define SZFenster_n notify MAX_0fe47a.* {\
if(($EVENT cmp "closed")) {$EVENT=~s/://;;;; fhem("setreading SZRoom $EVENT");;;; my $SZRoomT= sprintf("%.0f",ReadingsVal("MAX_1a1c2e","desiredTemperature",0));;;; fhem("defmod SZRoomT at +00:02:00 set SZRoom desired-temp $SZRoomT") }\
if (($EVENT cmp "open")) {fhem ("set SZRoom desired-temp 16") ;;}\
}
setuuid SZFenster_n 5e58cd79-f33f-5975-d23e-6932a9632bfb521b
attr SZFenster_n disable 1
attr SZFenster_n room 31_MAX!,notify
define Terrassentuer_n notify MAX_0cfe41.* {\
if(($EVENT cmp "closed")) {$EVENT=~s/://;;;; fhem("setreading WZRoom $EVENT");;;; my $WZRoomT= sprintf("%.0f",ReadingsVal("MAX_093d8a","desiredTemperature",0));;;; fhem("defmod WZRoomT at +00:02:00 set WZRoom desired-temp $WZRoomT")}\
if(($EVENT cmp "open")) {fhem ("set WZRoom desired-temp 16") ;;}\
}\
setuuid Terrassentuer_n 5e58cf76-f33f-5975-4d95-4042070af2a91ca3
attr Terrassentuer_n disable 1
attr Terrassentuer_n room 31_MAX!,notify
define IT_000FFFFFFF IT 000FFFFFFF 0F F0
setuuid IT_000FFFFFFF 5e5af16a-f33f-5975-fc40-3fb2170dfa09d56c
attr IT_000FFFFFFF IODev MapleCUN_1_433
attr IT_000FFFFFFF room IT
define BadFLi_di DOIF ([MAX_014030:state] cmp "opened") (set BadRoom desired-temp 16)\
DOELSEIF (([MAX_014030:state] cmp "closed") and ([BadRoom:desired-temp] eq "19")) (defmod BadRoomTmp at +00:01:00 set BadRoom desired-temp sprintf("%.0f",ReadingsVal("MAX_1a7298","desiredTemperature",0)))\
DOELSE ()
setuuid BadFLi_di 5e5c9682-f33f-5975-d329-dc299af871557d38
attr BadFLi_di disable 1
attr BadFLi_di do always
attr BadFLi_di room doif,31_MAX!
attr BadFLi_di startup set $SELF cmd_2
define BadFRe_di DOIF (([MAX_013c1d:state] eq "opened") or ([MAX_013c1d:state] eq "opened (rf error)")) (set BadRoom desired-temp 16)\
DOELSEIF ((([MAX_013c1d:state] eq "closed") or ([MAX_013c1d:state] eq "closed (rf error)")) and ([BadRoom:desired-temp] eq "16")) (defmod BadRoomTmp at +00:02:00 set BadRoom desired-temp sprintf("%.0f",ReadingsVal("MAX_1a7298","desiredTemperature",0)))\
DOELSE ()
setuuid BadFRe_di 5e5d4bd9-f33f-5975-b1b3-582470607af9185d
attr BadFRe_di disable 1
attr BadFRe_di room 31_MAX!,doif
attr BadFRe_di startup set $SELF cmd_2
define KidsF_di DOIF ([MAX_0fe059:state] eq "opened") (set KidsRoom desired-temp 16)\
DOELSEIF (([MAX_0fe059:state] ne "opened") and ([KidsRoom:desired-temp] eq "19")) {$EVENT=~s/://;;;; fhem("setreading KidsRoom $EVENT");;;; my $KidsRoomT= sprintf("%.0f",ReadingsVal("MAX_1a7291","desiredTemperature",0));;;; fhem("defmod KidsRoomTmp at +00:02:00set KidsRoom desired-temp $KidsRoomT")}\
DOELSE ()
setuuid KidsF_di 5e5d4c9d-f33f-5975-aa18-3bca9339725f14b4
attr KidsF_di disable 1
attr KidsF_di do always
attr KidsF_di room 31_MAX!,doif
attr KidsF_di startup set $SELF cmd_2
define SZF_di DOIF ([MAX_0fe47a:state] eq "opened") (set SZRoom desired-temp 16)\
DOELSEIF (([MAX_0fe47a:state] ne "opened") and ([SZRoom:desired-temp] eq "19")) (defmod SZRoomTmp at +00:02:00 set [SZRoom.desired-temp] sprintf("%.0f",ReadingsVal("MAX_1a1c2e","desiredTemperature",0)))\
DOELSE ()
setuuid SZF_di 5e5d4e05-f33f-5975-6d45-4f41e0580d239bf2
attr SZF_di disable 1
attr SZF_di room 31_MAX!,doif
attr SZF_di startup set $SELF cmd_2
define WZF_di DOIF ([MAX_0cfe41:state] eq "opened") (set WZRoom desired-temp 16)\
DOELSEIF (([MAX_0cfe41:state] ne "opened") and ([WZRoom:desired-temp] eq "19")) {$EVENT=~s/://;;;; fhem("setreading WZRoom $EVENT");;;; my $WZRoomT= sprintf("%.0f",ReadingsVal("MAX_093d8a","desiredTemperature",0));;;; fhem("defmod WZRoomTmp at +00:02:00 set WZRoom desired-temp $WZRoomT")}\
DOELSE ()
setuuid WZF_di 5e5d4ee1-f33f-5975-c4b5-753c1c37a567d380
attr WZF_di disable 1
attr WZF_di room 31_MAX!,doif
attr WZF_di startup set $SELF cmd_2
was aber nichts an der situation ändern, dass egal ob notify oder doif immer wieder nicht der Wert sondern die Funktion zugewiesen wurde...
daran scheiter ich leider....
Zitat von: Michael Berger am 04 März 2020, 20:35:14
die Fensterkontakte nicht immer "opened" bzw. "closed" melden sondern auch "opened (rf error)" oder "closed (rf error)
für den Fall könnte es einfacher sein nicht auf state zu triggern sondern auf das Reading onoff , da dies wirklich nur die Werte 0 und 1 haben kann.
Moin,
aber so etwas: fhem("defmod BadRoomT set BadRoom desired-temp $BadRoomT") ist doch ein totaler "Ausfall"?! Das kann doch nur Fehler hageln. Also da verstehe ich nicht mal den Gedanken dahinter :'(
Gibst Du sowas über die WEBUI ein oder fummelst Du direkt in der fhem.cfg?
Ich versuche mal den Einen hier zu verstehen,
define BadfensteLI_n notify MAX_014030.* {\
if(($EVENT cmp "closed")) {$EVENT=~s/://;;;; fhem("setreading BadRoom $EVENT");;;; my $BadRoomT= sprintf("%.0f",ReadingsVal("MAX_1a7298","desiredTemperature",0));;;; fhem("defmod BadRoomT set BadRoom desired-temp $BadRoomT") }\
if(($EVENT cmp "open")) {fhem ("set BadRoom desired-temp 16") ;;}\
}
damit Du es auch tust, machst Du bitte als erstes den Eventmonitor auf und setzt den Filter auf:
MAX_014030.*
Dann machst Du das Fenster auf und zu und postest hier das was da kommt.
Der Ausführungsteil mal laut gedacht: {if(("closed"?)) {lösche : setreading BadRoom Event lies Temperatur set BadRoom mit Temperatur }
if(( "open"?)) {set BadRoom feste Temperatur }}
Ok also:
- wenn closed dann lies eine Temperatur vom Fühler und setze die in Dummy? BadRoom.
- wenn open setze BadRoom mit fester Temperatur
Richtig?
Wenn Du ungeduldig bist, markierst Du den open Event und lässt Dir daraus ein notify erstellen. Steht auch hier (https://wiki.fhem.de/wiki/Notify).
Anstatt der leeren Klammer {} setzt Du
{Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT". Es gibt auch Part0 EVTPART0 und Part1 $EVTPART1}
Der Ausdruck: set BadRoom desired-temp $BadRoomT
setzt ein Reading desired-temp, wenn der Dummy nicht vorbereitet ist geht das so nicht, habe ich schon geschrieben. Also bitte ein
list BadRoom
Und bitte ein
list MAX_093d8a
weil ich keine Ahnung habe wie Deine Readings wirklich heißen.
Ich denke Du musst es so machen (nennt sich set magic):
Damit kannst Du Dir komplizierte Konstrukte sparen
setreading BadRoom desired-temp [MAX_1a7298:desiredTemperature]
Falls Du nicht weiß wie list geht: https://forum.fhem.de/index.php/topic,71806.0.html
Gruß Otto
Guten morgen...
sorry, komme erst jetzt dazu...
nein, ich fummel nicht in der fhem.cfg, ich mach immer nur in derWEBUI...
zum EventMonitor: wer lesen und richtig klicken kann ich klar von Vorteil... ich habs anfangs nicht zusammen gebracht den EvMon zu bedienen...aber dann hab ich lesen gelernt und es hat geklapt.. hier die gewünschten Infos:
020-03-06 07:16:01 MAX MAX_0cfe41 battery: ok
2020-03-06 07:16:01 MAX MAX_0cfe41 batteryState: ok
2020-03-06 07:16:01 MAX MAX_0cfe41 rferror: 1
2020-03-06 07:16:01 MAX MAX_0cfe41 onoff: 1
2020-03-06 07:16:01 MAX MAX_0cfe41 opened (rf error)
2020-03-06 07:16:01 MAX MAX_0cfe41 RSSI: -76
2020.03.06 07:16:05 1 : ERROR evaluating my $SELF='MAX_0cfe41_TestN';my $TYPE='MAX';my $EVTPART1='ok';my $NAME='MAX_0cfe41';my $EVENT='battery: ok';my $EVTPART0='battery:';{Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT". Es gibt auch Part0 EVTPART0 und Part1 $EVTPART1}: Can't locate object method "Part1" via package "ok" (perhaps you forgot to load "ok"?) at (eval 56105) line 1.
2020.03.06 07:16:05 3 : MAX_0cfe41_TestN return value: Can't locate object method "Part1" via package "ok" (perhaps you forgot to load "ok"?) at (eval 56105) line 1.
2020.03.06 07:16:05 1 : ERROR evaluating my $TYPE='MAX';my $SELF='MAX_0cfe41_TestN';my $EVTPART1='ok';my $NAME='MAX_0cfe41';my $EVTPART0='batteryState:';my $EVENT='batteryState: ok';{Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT". Es gibt auch Part0 EVTPART0 und Part1 $EVTPART1}: Can't locate object method "Part1" via package "ok" (perhaps you forgot to load "ok"?) at (eval 56106) line 1.
2020.03.06 07:16:05 3 : MAX_0cfe41_TestN return value: Can't locate object method "Part1" via package "ok" (perhaps you forgot to load "ok"?) at (eval 56106) line 1.
2020.03.06 07:16:05 1 : ERROR evaluating my $SELF='MAX_0cfe41_TestN';my $TYPE='MAX';my $NAME='MAX_0cfe41';my $EVTPART1='0';my $EVTPART0='rferror:';my $EVENT='rferror: 0';{Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT". Es gibt auch Part0 EVTPART0 und Part1 $EVTPART1}: Can't locate object method "Part1" via package "0" (perhaps you forgot to load "0"?) at (eval 56107) line 1.
2020.03.06 07:16:05 3 : MAX_0cfe41_TestN return value: Can't locate object method "Part1" via package "0" (perhaps you forgot to load "0"?) at (eval 56107) line 1.
2020.03.06 07:16:05 1 : ERROR evaluating my $NAME='MAX_0cfe41';my $EVTPART1='0';my $EVENT='onoff: 0';my $EVTPART0='onoff:';my $SELF='MAX_0cfe41_TestN';my $TYPE='MAX';{Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT". Es gibt auch Part0 EVTPART0 und Part1 $EVTPART1}: Can't locate object method "Part1" via package "0" (perhaps you forgot to load "0"?) at (eval 56108) line 1.
2020.03.06 07:16:05 3 : MAX_0cfe41_TestN return value: Can't locate object method "Part1" via package "0" (perhaps you forgot to load "0"?) at (eval 56108) line 1.
2020.03.06 07:16:05 1 : ERROR evaluating my $TYPE='MAX';my $SELF='MAX_0cfe41_TestN';my $EVTPART0='closed';my $EVENT='closed';my $NAME='MAX_0cfe41';{Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT". Es gibt auch Part0 EVTPART0 und Part1 $EVTPART1}: Global symbol "$EVTPART1" requires explicit package name (did you forget to declare "my $EVTPART1"?) at (eval 56109) line 1.
2020.03.06 07:16:05 3 : MAX_0cfe41_TestN return value: Global symbol "$EVTPART1" requires explicit package name (did you forget to declare "my $EVTPART1"?) at (eval 56109) line 1.
2020.03.06 07:16:05 1 : ERROR evaluating my $SELF='MAX_0cfe41_TestN';my $TYPE='MAX';my $EVENT='RSSI: -75';my $EVTPART0='RSSI:';my $EVTPART1='-75';my $NAME='MAX_0cfe41';{Log 1, "Das Device $NAME hat ausgeloest, der Event sah so aus: $EVENT". Es gibt auch Part0 EVTPART0 und Part1 $EVTPART1}: Can't locate object method "Part1" via package "-75" (perhaps you forgot to load "-75"?) at (eval 56110) line 1.
2020.03.06 07:16:05 3 : MAX_0cfe41_TestN return value: Can't locate object method "Part1" via package "-75" (perhaps you forgot to load "-75"?) at (eval 56110) line 1.
2020-03-06 07:16:05 MAX MAX_0cfe41 battery: ok
2020-03-06 07:16:05 MAX MAX_0cfe41 batteryState: ok
2020-03-06 07:16:05 MAX MAX_0cfe41 rferror: 0
2020-03-06 07:16:05 MAX MAX_0cfe41 onoff: 0
2020-03-06 07:16:05 MAX MAX_0cfe41 closed
2020-03-06 07:16:05 MAX MAX_0cfe41 RSSI: -75
Zum Verstehen vom Code:
Ich möchte WENN fenster offen dann soll ein Dummywert ersetzt werden. "set BadRoom desired-temp 16" funktioniert ja auch...
WENN FEnster geschlossen - Lies die gewünschte Temperature aus dem Thermostat aus und weise sie den Dummy OHNE kommastelle zu.
soweit stimmt deine analyse.
hier das list BadRoom:
Internals:
FUUID 5c5e7fc6-f33f-5975-a8ee-54e74b9f1e093d5b
NAME BadRoom
NR 494
STATE desired-temp sprintf("%.0f",ReadingsVal("MAX_1a7298","desiredTemperature",0))
TYPE dummy
READINGS:
2020-03-02 06:09:06 RSSI -47.5
2020-03-02 06:09:06 battery ok
2020-03-02 06:09:06 batteryState ok
2020-03-01 20:22:53 closed (rf error)
2020-02-28 18:55:18 deassociate MAX_1a7298
2020-02-28 18:36:12 desired-temp 23.0
2020-03-02 06:09:06 onoff 0
2020-03-01 18:07:51 opened (rf error)
2020-03-02 06:09:06 rferror 0
2020-03-04 20:24:42 state desired-temp sprintf("%.0f",ReadingsVal("MAX_1a7298","desiredTemperature",0))
Attributes:
event-on-change-reading state
genericDeviceType thermostat
homebridgeMapping TargetTemperature=desired-temp::desired-temp,minValue=5,maxValue=35,minStep=0.5 CurrentTemperature=MYSENSOR_150:temperature,nocache=1 TargetHeatingCoolingState=heatingState,values=OFF:off;;ON:on;;COOL:off;;AUTO:auto,cmds=OFF:off;;COOL:off;;HEAT:on;;AUTO:auto CurrentHeatingCoolingState=heatingState,values=OFF:off;;HEAT:on;;COOL:off;;AUTO:auto,valud=OFF
room 31_MAX!,Heizung,Homekit
setList desired-temp:15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
verbose 1
webCmd desired-temp
und die Konstellation die so viele Fehler verursachen soll, habe ich aus dem Forum, weil ich weise hier Dummys werte aus FHEM2FHEM zu.... finde leider nur grad den beitrag nicht....
in späterer Folge möchte ich auch die Fensterkontakte mit den entsprechenden Thermostaten koppeln, da diese dann etwas Zeit benötigen um die desired-Temp wieder einzustellen habe ich die 2min Pause eingestellt bevor ich die TEmperatur auslese und übergebe...
Zitat von: Michael Berger am 06 März 2020, 07:17:39
da diese dann etwas Zeit benötigen um die desired-Temp wieder einzustellen habe ich die 2min Pause eingestellt bevor ich die TEmperatur auslese und übergebe...
Behalte das mal im Hinterkopf und lass uns das zur gegeben Zeit dann im richtigen Forum diskutieren warum dem nicht so ist ....
ok werd ich machen...
bez. dem "Error-Code" den habe ich zum zuweisen von Werten die ich aus FHEM2FHEM bekomme...
define MYSENSOR_120d dummy
setuuid MYSENSOR_120d 5d176237-f33f-2c3b-486b-2466e9f94f46e780
attr MYSENSOR_120d alias Wohnzimmer
attr MYSENSOR_120d group Ist
attr MYSENSOR_120d icon temp_temperature
attr MYSENSOR_120d room 20_EG-FBH,30_EG-Radiator,FHEM2FHEM
define MYSENSOR_120_notify notify MYSENSOR_120d|MYSENSOR_120:.* { $EVENT=~s/://;;;; fhem("setreading MYSENSOR_120d $EVENT") ;;;; my $MYSENSOR_120_T= ReadingsVal("MYSENSOR_120d","temperature",0) ;;;; fhem("setreading MYSENSOR_120d state $MYSENSOR_120_T")}
der plan hier war die Werte von MYSENSOR_120 am Pi1 auf den P2 zu übergeben und MYSENSOR_120d zuzuweisen, damit ich damit auf dem PI2 weiterarbeiten kann. Ich bin mir aber Sicher, dass das eleganter und einfacher geht, da beide PIs in die selbe DBLog sichern... sollte es hier nicht möglich sein die geloggten WErte weiter zu verwenden?
ich weiß, es ist ein wenig off-topic...
Moin,
ich würde zur Auswertung der Fensterkontakte den onoff Event verwenden (hat Wzut auch schon gesagt ;) ), der ist doch simpler und eindeutiger als opened (rf..) closed.
Ich beschreibe mal die einzelnen Grundlagenschritte
Das Zuweisen der Temperatur soll also in das Reading desired-temp erfolgen und nicht in den state, der Befehl dazu:
set BadRoom desired-temp 16
bzw. siehe (https://fhem.de/commandref_DE.html#set) wegen dem suffix :i
set BadRoom desired-temp [MAX_1a7298:desiredTemperature:i]
Als trigger für das notify nehmen wir MAX_014030:onoff:.0 bzw MAX_014030:onoff:.1
Da hier nur 0 und 1 auftaucht können wir den regEx simpel halten: ein Punkt fürs Leerzeichen und ein Punkt für 0/1
define BadfensteLI_n notify MAX_014030:onoff:.. {}
Der interessante Wert steht im $EVTPART1, der Event "2020-03-06 07:16:05 MAX MAX_0cfe41 onoff: 0" erscheint in diesen Variablen:
$NAME MAX_0cfe41
$EVENT onoff: 0
$EVTPART0 onoff:
$EVTPART1 0
Also wird der Ausführungsteil
if ($EVTPART1) {fhem("set BadRoom desired-temp 16")} else {fhem("set BadRoom desired-temp [MAX_1a7298:desiredTemperature:i]")}
Da Du das offenbar "massenhaft" würde ich mir noch Gedanken machen, alles zusammenzuführen und nicht pro Fenster ein notify zu machen.
Gruß Otto
Da Du noch das FHEM2FHEM Thema eingeworfen hast:
Der Dummy und das notify soll sein um MYSENSOR_120d von Pi1 nach Pi2 zu bringen? Wenn ja:
Das notify brauchst Du nicht, das ist ein Konstrukt aus den Anfängen von FHEM. Du brauchst nur den Dummy in der empfangenden Instanz, der genau so heißt wie der Sensor in der sendenden Instanz. Alles andere ist lediglich Magic :)
WAS? werd ich testen... ich hab mich da immer herumgequält... cool...
danke für den tip, d.h. der Dummy holt sich dann die werte automatisch aus der DB - vorausgesetzt die gleiche benennung wie der Sensor selbst)
ich bin mir sicher, in meinen beiden FHEMs ist sehr viel optimierungspotential was den Code anbelangt... aber man bastelt da halt immer rum und das ganze wächst und wächst...
danke auf alle fälle für den tip...
Zitat von: MichlB am 06 März 2020, 10:20:20
WAS? werd ich testen... ich hab mich da immer herumgequält... cool...
danke für den tip, d.h. der Dummy holt sich dann die werte automatisch aus der DB - vorausgesetzt die gleiche benennung wie der Sensor selbst)
Moment, hat nichts mit der DB zu tun! Der Dummy bekommt die Werte über FHEM2FHEM! Du solltest auf alle Fälle nur einmal loggen, also entweder den Originalwert oder den vom Dummy!
hallo Otto123
hab das jetzt mal ein paar tage beobachtet, das funktioniert, aber die werte werden nicht zeitgleich sondern mit ca. 5 min verspätung übertragen.... kann man das irgendwie beschleunigen? ich mein 30sek oder 1min verspätet ist ok aber 5min ist schon lange... vor allem wenn ich die werte zum berechnen brauche...
nachtrag:
muss mich korrigieren, die werte werden jetzt zeitnah synchronisiert, somit passt das... danke für den tip...
und wie mach ich das jetzt mit meinem eigentlichen problem weiter???
Was ist jetzt das eigentliche Problem?
Meine Lösung stand doch in Beitrag #8? Die war nicht gut?
ah, hab ich überlesen, werd ich mal testen ob das funktioniert... danke dir schonmal....
lg Michl
heureka! das funktioniert...
was ich nicht versteh ist das
if ($EVTPART1) {fhem("set BadRoom desired-temp 16")} else {fhem("set BadRoom desired-temp [MAX_1a7298:desiredTemperature:i]")}
bei $EVTPART1 kommt entweder 0 oder 1.... aber bei der IF abfrage fehlt mir die bedingung... so was wie $EVTPART1 = 1 dann...
kannst mir das ein bisschen verständlicher erklären??? da blick ich nicht durch und ich versteh gern dinge die ich mache...
und das ...:desiredTemperature:i versteh ich auch nicht so recht... was bedeutet das "i" und kommt das direkt mit der dezimalformattierung mit 1 kommastelle?
ich werde dennoch die fenster einzeln "notify-en" sonst könnt mir das zu kompliziert werden, ich versuchs gern einfach zu halten... wie gesagt, ich versuch die dinge immer zu verstehen...
danke und lg.
if () - testet den Ausdruck in der Klammer auf wahr(true) oder falsch(false) Diese Werte sind eigentlich nur ein Synonym für 0 und 1
true = 1
false = 0
Genau genommen wird sogar meist nur die 0 ausgewertet und alles andere als null wird als true gewertet. Insofern ist mein Konstrukt minimalistisch aber in diesem Fall ziemlich korrekt ;)
Du kannst natürlich gern auch ($EVTPART1 == 1) schreiben
Das andere Kontsrukt hatte ich aber extra als Erklärung verlinkt, hast Du auch übersehen?
https://fhem.de/commandref_DE.html#set
Zitat[device:name] mit dem Wert des Readings, Internals oder Attributes für device, falls sowohl device, als auch Reading, Internal oder Attribut existiert, und nicht leer ist.
Man kann einen der Präfixe r:, i: oder a: verwenden, um die Suche einzuschränken, genau wie im devspec.
...
Das Suffix :i extrahiert die erste Zahl als Ganzzahl.
Zitat... und kommt das direkt mit der dezimalformattierung mit 1 kommastelle?
Du wolltest aber keine Kommastelle! -> sprintf("%.0f"
Gruß Otto
keine Kommastelle ist etwas ungeschickt, MAX Thermostate verstehen Soll Temeperatur (desiredTemperature) in 0.5 Grad Schritten.
Das Reading desiredTemperature kann 1:1 übernommen werden da es keine Werte auserhalb des zulässigen Bereichs enthält.