Reading im Ausführungsteil schalten

Begonnen von Tabularasa, 17 Oktober 2018, 15:57:45

Vorheriges Thema - Nächstes Thema

Tabularasa

Hallo. Habe folgendes DOIF
Internals:
   CFGFN     
   DEF        ([Buderus:OutdoorTemp]>15) (set Buderus RoomTemporaryDesiredTemp 17)
   MODEL      FHEM
   NAME       di_Heizung
   NR         16230
   NTFY_ORDER 50-di_Heizung
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2018-10-17 15:49:38   Device          Buderus
     2018-10-17 15:49:38   cmd             1
     2018-10-17 15:49:38   cmd_event       di_Heizung
     2018-10-17 15:49:38   cmd_nr          1
     2018-10-17 15:49:38   error           set Buderus RoomTemporaryDesiredTemp 17: 17
     2018-10-17 15:48:28   mode            enabled
     2018-10-17 15:49:38   state           cmd_1
   Regex:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'Buderus','OutdoorTemp')>15
   devices:
     0           Buderus
     all         Buderus
   do:
     0:
       0          set Buderus RoomTemporaryDesiredTemp 17
     1:
   helper:
     event      RoomDesiredTemp: 17.5
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   
     timerevent
     timerevents
     timereventsState
     triggerDev Buderus
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: di_Heizung
       error: set Buderus RoomTemporaryDesiredTemp 17: 17
       state: cmd_1
     triggerEvents:
       RoomDesiredTemp: 17.5
     triggerEventsState:
       RoomDesiredTemp: 17.5
   internals:
   itimer:
   readings:
     0           Buderus:OutdoorTemp
     all         Buderus:OutdoorTemp
   trigger:
   uiState:
   uiTable:
Attributes:
   disable    0
   room       DOIF


Leider bekomme ich einen error angezeigt, schalten tut es zwar aber mich stört der error ein bisschen ::)
Im Log erscheint dazu folgendes
2018.10.17 15:49:00 1: ERROR evaluating { Buderus }: Bareword "Buderus" not allowed while "strict subs" in use at (eval 230445) line 1.

2018.10.17 15:49:35 3: Buderus set raw /heatingCircuits/hc1/temporaryRoomSetpoint value 17
2018.10.17 15:49:35 2: Buderus get /heatingCircuits/hc1/temporaryRoomSetpoint - HTTP: HTTP/1.0 200 The request has succeeded
Content-Type: application/json, data: {"id":"/heatingCircuits/hc1/temporaryRoomSetpoint","type":"floatValue","writeable":1,"recordable":0,"value":17.5,"unitOfMeasure":"C","minValue":5.0,"maxValue":30.0,"state":[{"off":0.0},{"na":-1.0}]}
2018.10.17 15:49:35 3: Buderus /heatingCircuits/hc1/temporaryRoomSetpoint set floatValue 17
2018.10.17 15:49:35 3: Buderus raw HTTP data: {"value":17}
2018.10.17 15:49:37 2: Buderus get /heatingCircuits/hc1/temporaryRoomSetpoint - HTTP: HTTP/1.0 200 The request has succeeded
Content-Type: application/json, data: {"id":"/heatingCircuits/hc1/temporaryRoomSetpoint","type":"floatValue","writeable":1,"recordable":0,"value":17.0,"unitOfMeasure":"C","minValue":5.0,"maxValue":30.0,"state":[{"off":0.0},{"na":-1.0}]}
2018.10.17 15:49:38 2: di_Heizung: set Buderus RoomTemporaryDesiredTemp 17: 17
2018.10.17 15:49:38 1: Perfmon: possible freeze starting at 15:49:36, delay is 2.014

Kann jemand daran erkennen worauf der error zurückzuführen ist?
Danke

Otto123

#1
Hi,

So würdest Du den state des Gerätes Buderus mit "RoomTemporaryDesiredTemp 17" setzen!
Das geht so sicher nicht! Es sei denn Buderus hat readingList gesetzt.

Was willst Du wirklich? Ein Reading im Gerät Buderus setzen? Dann
setreading Buderus RoomTemporaryDesiredTemp 17

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ellert

Diese Fehlermeldung
Zitat2018.10.17 15:49:00 1: ERROR evaluating { Buderus }: Bareword "Buderus" not allowed while "strict subs" in use at (eval 230445) line 1.
sollte nicht vom Schaltvorgang des DOIF kommen, sie entsteht 38 s vorher.

Set scheint untypischerweise etwas zurückzugeben, das wird als Fehler interpretiert. Passiert das auch in der Befehlszeile?

Siehe auch https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche#Besonderheit_des_Error-Reading

Tabularasa

#3
Wenn ich das wüsste was ich will ::)
Ich habe das Modul BDKM für meine Heizung und möchte in der Set Liste was schalten.
Hier mal ein gekürztes list von dem Buderus Device
Internals:
   BASEINTERVAL 120
   DEF        192.168.178.99
   HTTPTIMEOUT 10
   INTERPOLLDELAY 0
   IP         192.168.178.99
   ISPOLLING  0
   NAME       Buderus
   NR         234
   READBACKDELAY 500
   SEQUENCE   11
   STATE      idle
   TYPE       BDKM
   VERSION    $Id: 79_BDKM.pm 12770 2016-12-14 08:39:57Z arnoaugustin $
   IDS:

     /heatingCircuits/hc1/temporaryRoomSetpoint:
       MAX        30
       MIN        5
       TYPE       floatValue
       UNIT       C
       VALUE      17
       WRITEABLE  1

   JOBQUEUE:
   POLLIDS:
     /heatingCircuits/hc1/temporaryRoomSetpoint:
       DELTA     
       MODULO     1
   READINGS:
     
     2018-10-17 15:51:34   RoomDesiredTemp 17
     2018-10-06 21:52:18   RoomManualDesiredTemp 21
     2018-10-17 15:49:37   RoomTemporaryDesiredTemp 17
     2018-10-17 16:16:50   SecondBurnerWorkingTime 0
     2018-10-17 16:16:50   Status          ACTIVE
   REALTOUSER:
     /heatingCircuits/hc1/temporaryRoomSetpoint RoomTemporaryDesiredTemp
     
   UPDATES:
     
     /heatingCircuits/hc1/temporaryRoomSetpoint
     
   USERTOREAL:
/heatingCircuits/hc1/manualRoomSetpoint
     RoomTemporaryDesiredTemp /heatingCircuits/hc1/temporaryRoomSetpoint
   helper:
     _98_statistics ST.Gasverbrauch
Attributes:
   PollIds    RC300DEFAULTS
   event-on-change-reading .*
   group      Buderus
   room       System

Das was ich unten im Bild so setzen möchte, wollte ich im DOIF machen
Danke :D

edit
Zitat von: Ellert am 17 Oktober 2018, 17:02:42
Diese Fehlermeldungsollte nicht vom Schaltvorgang des DOIF kommen, sie entsteht 38 s vorher.

Set scheint untypischerweise etwas zurückzugeben, das wird als Fehler interpretiert. Passiert das auch in der Befehlszeile?

Siehe auch https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche#Besonderheit_des_Error-Reading
Ja die Meldung habe ich alle paar Minuten einmal... Keine Ahnung was sie bedeutet

Wenn ich set Buderus RoomTemporaryDesiredTemp 16 in die Befehlszeile eingebe kommt 16 und im eventmonitor steht
2018-10-17 17:09:15 BDKM Buderus RoomTemporaryDesiredTemp: 16
also ohne Fehler anscheinend...

Otto123

Gut meine Idee war offenbar verkehrt - das Gerät kann offenbar das was Du willst. Geht denn der Befehl so wie er ist in der FHEm Kommandozeile?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Tabularasa

#5
Zitat von: Otto123 am 17 Oktober 2018, 17:14:55
Geht denn der Befehl so wie er ist in der FHEm Kommandozeile?

Gruß Otto
Siehe mein edit
Zitat von: Tabularasa am 17 Oktober 2018, 17:05:46

Wenn ich set Buderus RoomTemporaryDesiredTemp 16 in die Befehlszeile eingebe kommt 16 und im eventmonitor steht
2018-10-17 17:09:15 BDKM Buderus RoomTemporaryDesiredTemp: 16
also ohne Fehler anscheinend...
Befehlszeile=Kommandozeile

Würde ich das in die Kommandozeile eingeben?
ZitatBesonderheit des Error-Reading
Das Reading "error" enthält Fehlermeldungen oder Rückgabewerte von Befehlen, die nicht 0, "", undef. also logisch "falsch" entsprechen. Die Ausführung des Befehls

({my $var = 1})
setzt das Error-Reading

error      {my $var =1 }: 1
Diese falsche Fehlermeldung kann vermieden werden, durch Erzeugen eines Rückgabewertes, der logisch "falsch" entspricht.

({my $var = 1;; 0})
Die mit ";; 0" angehängte Null verhindert das Setzen des Error-Readings.
und wie kann ich das rückgängig machen falls es dadurch nicht weg ist? Bzw hat das nur auf dieses DOIF Auswirkungen?

Otto123

#6
Uih, da hab ich keine Idee. Du kannst Spasseshalber ein notify machen :)

define n_Heizung notify Buderus:OutdoorTemp.* { if ($EVTPART1 > 15) {fhem("set Buderus RoomTemporaryDesiredTemp 17")}}

Kann aber sein, der Event stimmt so noch nicht.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ellert

Die Beispiele im Wiki sollen nur erläutern, wie der falsche Fehler zu Stande kommt und dass er bei Rückgabe von logisch 0 vermieden wird.

In Deinem Fall müsstest Du set mit der Funktion fhem aufrufen.

(Bedingung) {fhem("set Buderus RoomTemporaryDesiredTemp 17");;undef}

Ggf. kanst Du ein Semikolon weglassen.

Tabularasa

Zitat von: Otto123 am 17 Oktober 2018, 18:11:59
Uih, da hab ich keine Idee. Du kannst Spasseshalber ein notify machen :)

define n_Heizung Buderus:OutdoorTemp.* { if ($EVTPART1 > 15) {fhem("set Buderus RoomTemporaryDesiredTemp 17")}}

Kann aber sein, der Event stimmt so noch nicht.

Gruß Otto
Auch wenn es noch nicht so aussieht, ich glaube mit DOIF komme ich besser klar ;D aber danke
Zitat von: Ellert am 17 Oktober 2018, 18:54:01
Die Beispiele im Wiki sollen nur erläutern, wie der falsche Fehler zu Stande kommt und dass er bei Rückgabe von logisch 0 vermieden wird.

In Deinem Fall müsstest Du set mit der Funktion fhem aufrufen.

(Bedingung) {fhem("set Buderus RoomTemporaryDesiredTemp 17");;undef}

Ggf. kanst Du ein Semikolon weglassen.

OK danke probiere ich morgen gleich aus

Damian

Perl-Modus dürfte unempfindlicher sein:

DOIF {if ([$SELF:warm]) {fhem_set"Buderus RoomTemporaryDesiredTemp 17"}}
attr DOIF_Reading warm:[Buderus:OutdoorTemp]>15
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

#10
ZitatAuch wenn es noch nicht so aussieht, ich glaube mit DOIF komme ich besser klar ;D aber danke
Stimmt: DOIF kann zwar nicht immer mit FHEM Befehlen umgehen - aber der letzte Vorschlag erscheint so viel verständlicher als ein simples notify.  :-\ :-[ :'(

Edit: Sorry da fehlte was Entscheidendes:
define n_Heizung notify Buderus:OutdoorTemp.* { if ($EVTPART1 > 15) {fhem("set Buderus RoomTemporaryDesiredTemp 17")}}

Warum traust Du dich nicht zu Copy & Paste ? Ich habe es extra probiert, das klappt schon so  ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

Zitat von: Otto123 am 17 Oktober 2018, 21:05:47
Stimmt: DOIF kann zwar nicht immer mit FHEM Befehlen umgehen - aber der letzte Vorschlag erscheint so viel verständlicher als ein simples notify.  :-\ :-[ :'(

Warum traust Du dich nicht zu Copy & Paste ? Ich habe es extra probiert, das klappt schon so  ;)

Dann rate mal, warum ich DOIF_Readings ins Spiel gebracht habe. Als Tipp: Notify leistet nicht das Gewünschte in deiner Definition ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Tabularasa

#13
Zitat von: Otto123 am 17 Oktober 2018, 21:05:47
Stimmt: DOIF kann zwar nicht immer mit FHEM Befehlen umgehen - aber der letzte Vorschlag erscheint so viel verständlicher als ein simples notify.  :-\ :-[ :'(

Edit: Sorry da fehlte was Entscheidendes:
define n_Heizung notify Buderus:OutdoorTemp.* { if ($EVTPART1 > 15) {fhem("set Buderus RoomTemporaryDesiredTemp 17")}}

Warum traust Du dich nicht zu Copy & Paste ? Ich habe es extra probiert, das klappt schon so  ;)

Das DOIF war so nicht ganz vollständig. Sondern so
([Buderus:OutdoorTemp]>15 and [HZG_EG_WZ:actuator]<65 and [HZG_EG_EZ:actuator]<45 and [07:00-22:00]) (set RoomTemporaryDesiredTemp 17)
DOELSEIF (Bedingung) (set RoomTemporaryDesiredTemp 15)
DOELSE (set RoomTemporaryDesiredTemp -1)

Wie würde das notify denn da aussehen? Ich habe davon leider keine Ahnung...
Ich probiere aber die DOIF Variannten von @Ellert und @Damian aber mal aus. Wie würde denn da das DOIF in Perl aussehen? So ungefähr??
{if ([$SELF:warm] and [HZG_EG_WZ:actuator]<65 and [HZG_EG_EZ:actuator]<45 and [07:00-22:00]) {fhem_set"Buderus RoomTemporaryDesiredTemp 17"}}
Elseif (Bedingung) {fhem_set ""}
Elseif {fhem_set"Buderus RoomTemporaryDesiredTemp -1"}

Otto123

#14
Zitat von: Tabularasa am 19 Oktober 2018, 15:55:43
Wie würde das notify denn da aussehen? Ich habe davon leider keine Ahnung...
Das Schwarze ist die Schrift? Die weiße Zeile mit Code: davor und Inhalt in meinem Post?  :-\
Sorry, hab nicht alles gelesen ...
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz