HM-CC-RT-DN

Begonnen von Alex85, 13 September 2013, 11:03:07

Vorheriges Thema - Nächstes Thema

strauch

Wenn man über das Wissen verfügt ja, wenn nicht muss man sich das Wissen erst aneignen, du hast es, dann ist es kein Problem. Ich fing dann gestern Abend an, viel zu lesen und zu suchen, macht mir ja auch Spaß. Aber ich muss sagen bei den FHTs hat mit der Plot auch einfach gereicht. Ich musste gar nichts machen.

Gut nun ist FHEM nicht an Leute gerichtet die sich nicht damit beschäftigen wollen und sich alles von alleine einrichtet. Ich fands beim FHT praktisch und wer es anders möchte, der macht ebend ein neues.
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

juelich

Hallo,

nachdem die Steuerung meiner Geräte über den Google-Kalender seit 2 Wochen super läuft, ist mir gestern Abend ein neues Problem im Log aufgefallen (ich weiß nicht, wie lange das Problem schon existiert, ich schaue nicht regelmäßig auf die Logs):

2013.11.04 09:25:25 3: set hz.kueche desired-temp  : desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 09:25:25 3: HZ.Kueche_an return value: desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 09:25:25 3: set hz.kueche desired-temp  : desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 09:25:25 3: HZ.Kueche_aus return value: desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 09:25:26 3: set hz.bad desired-temp  : desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 09:25:26 3: HZ.Bad_an return value: desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 09:25:26 3: set hz.bad desired-temp  : desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 09:25:26 3: HZ.Bad_aus return value: desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 10:25:25 3: set hz.kueche desired-temp  : desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 10:25:25 3: HZ.Kueche_an return value: desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 10:25:25 3: set hz.kueche desired-temp  : desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 10:25:25 3: HZ.Kueche_aus return value: desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 10:25:26 3: set hz.bad desired-temp  : desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 10:25:26 3: HZ.Bad_an return value: desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 10:25:26 3: set hz.bad desired-temp  : desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 10:25:26 3: HZ.Bad_aus return value: desired-temp requires parameter: [on|off|5.0..30.0]

Offensichtlich wird exakt jede Stunde in Bad und Küche versucht, die Heizung auf eine nichtdefinierte Temperatur einzustellen (im Wohnzimmer nicht), was natürlich nicht funktioniert.

Wo kommen diese Befehle her?

Ich habe lediglich für jede Heizung 2 Notifys, die nach einem Kalender die Heizung stellen. Mehr Befehle gibt es nicht.
Wie kann ich herausbekommen, was da los ist?

Viele Grüße

Markus

betateilchen

Ich bevorzuge Learning-by-Doing und nicht Learning-by-Copying  8) aber ich hab schon verstanden, was Du meinst.
Aber ganz ehrlich: ein paar einfache Kurven plotten ist in fhem m.E. eine der geringsten Herausforderungen.

Regel 1: erstelle ein Logfile, in dem alle Werte stehen, die Du plotten willst.
Regel 2: Klicke in der Detailansicht des Logfiles auf "Create SVG..."
Regel 3: wähle die Daten aus der vorgegebenen Liste, die im Plot ausgegeben werden sollen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: juelich am 04 November 2013, 11:43:28Wo kommen diese Befehle her?

Ich habe lediglich für jede Heizung 2 Notifys, die nach einem Kalender die Heizung stellen. Mehr Befehle gibt es nicht.
Wie kann ich herausbekommen, was da los ist?

Zeig halt mal die beiden notifies her. (Gefühlsmäßig würde ich sagen, die Krux liegt an einem Kalendereintrag und nicht in fhem selbst)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

juelich

Zitat von: martinp876 am 04 November 2013, 09:23:32
Meine implementierung ist ein notify. Im Gegensatz zu stricture wird desired-temp immer "ge-synct", egal wo du sie einstellst. Auch der mode wird "copiert". Regel ist, dass das letzte Ändern an einem RT auf die anderen kopiert wird.
Es wird nur geschrieben, wenn der Wert noch nicht stimmt - was messages "spart"
Nachteil: es kann 5min dauern bis alles durch ist. Grund: der erste RT wird verstellt und ich warte bis er es meldet. dann wird der 2. geschrieben - aber erst wenn der aufwacht.


Hallo Martin,

das verstehe ich nicht ganz. Da die Thermostate bei mir untereinander geppert sind, wird jede manuelle Änderung eines Thermostaten ohne Beteiligung des HMLAN direkt untereinander weitergegeben. Möchte ich jetzt aus FHEM eine andere Wohnzimmertemperatur haben (egal ob über Kalender oder manuell) muss das Kommando doch sowieso vom HMLAN an alle 4 Thermostate geschickt werden, auch beim Notify, oder sehe ich das falsch? Beim Notify läuft doch auch jede manuelle Änderung beim Thermostaten über den HMLAN, oder habe ich das jetzt falsch verstanden? Rückmeldung über die Änderung eines Thermostaten an FHEM -> Korrektur wenn nötig der anderen Thermostate. Da sehe ich sogar mehr Befehle.

Viele Grüße

Markus

strauch

Zitat von: betateilchen am 04 November 2013, 11:46:57
Ich bevorzuge Learning-by-Doing und nicht Learning-by-Copying  8) aber ich hab schon verstanden, was Du meinst.
Aber ganz ehrlich: ein paar einfache Kurven plotten ist in fhem m.E. eine der geringsten Herausforderungen.

Du hast ja recht :-). Soweit bin ich auch, was mir dann eher Schwierigkeiten bereitet ist beim Tür Fensterkontakt, das open close ausfiltern und das entsprechend zu plotten. Da kann man dann solche Sachen machen:
Tics as ("Txt" val, ...): ("Zu" 0, "Auf" 1) wobei ich da schon viel kopiere, ich schau wie es an anderer Stelle gemacht wird und teste dann durch und versuche das natürlich auch zu verstehen. Ist nicht unbedingt die "nachhaltigste" Vorgehensweise, mir fehlt aber einfach auch die Zeit mich entsprechend Tief einzudenken..... leider.

Aber das wird jetzt auch offtopic
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

juelich

Zitat von: betateilchen am 04 November 2013, 11:48:46
Zeig halt mal die beiden notifies her. (Gefühlsmäßig würde ich sagen, die Krux liegt an einem Kalendereintrag und nicht in fhem selbst)

Die Notifys sind:
Kalender_Kueche:modeStarted.* { my $reading="%EVTPART0"; my $uid= "%EVTPART1"; my ($dtemp,undef)= split(/,,fhem("get Kalender_Kueche summary $uid")); { fhem("set hz.kueche desired-temp $dtemp"); } }
Kalender_Kueche:modeEnded.* { my $reading="%EVTPART0"; my $uid= "%EVTPART1"; my (undef,$dtemp)= split(/,,fhem("get Kalender_Kueche summary $uid")); { fhem("set hz.kueche desired-temp $dtemp"); } }

Wie man am Log sieht, funktioniert das auch einwandfrei um 11:00 Uhr, um 11.25 dann wieder eine undefinierte Temperatur setzen zu wollen:

2013.11.04 11:00:00 3: get Kalender_Kueche summary xxx : 21\,17
2013.11.04 11:00:00 2: CUL_HM set hz.kueche desired-temp 17
2013.11.04 11:25:25 3: set hz.kueche desired-temp  : desired-temp requires parameter: [on|off|5.0..30.0]

Ich habe für jede Heizung einen eigenen Kalender mit dem Betreff: Temp.start,temp.ende.

Hat auch immer gut funktioniert - und die Temperaturen werden ja auch korrekt ausgelesen.

Viele Grüße

Markus

juelich

Wahrscheinlich lieght das Problem ja bei einem fehlerhaften SPLIT - leider ist diese Funktion nirgendwo vernünftig beschrieben. Ich habe mich einfach bei Betateilchen bedient, aber scheinbar nicht richt :-(
In meinem Kalender habe ich für jede Heizung einen Kalender, es werden Ereignisse definiert, mit dem Betreff "temp.beginn,temp.ende".
Lieber wäre mir ja ein Space zwischen den Temperaturen gewesen, aber das habe ich gar nicht hinbekommen.
Wie ist denn nun die genaue Syntax von Split? Kann mir da jemand helfen?

Viele Grüße

Markus

martinp876

Hallo Markus,

nun, das split solltest du aber schon alleine klären können - da gibt es Tonnen von Doku im Rahmen von perl.

split trenner,string

evtl
split(",",fhem("get Kalender_Kueche summary $uid"))

juelich

Hallo Martin, habe ewig nach "split FHEM" gegooglet und nichts definitives gefunden, auch nicht in der Reference.

Das mit "," habe ich auch versucht, die gleiche Fehlermeldung. Von Google wird auch nicht "," zurückgeliefert, sondern "\," - könnte das daran liegen?
Viele Grüße

Markus

juelich

Und des Merkwürdige ist, es funktioniert ja:

2013.11.04 13:00:00 3: get Kalender_Wohnzimmer summary xxx: 24\,16
2013.11.04 13:00:00 2: CUL_HM set hz.wz desired-temp 24\
2013.11.04 13:00:00 2: CUL_HM set hz.wz1 desired-temp 24\
2013.11.04 13:00:00 2: CUL_HM set hz.wz2 desired-temp 24\
2013.11.04 13:00:00 2: CUL_HM set hz.wz3 desired-temp 24\
2013.11.04 13:01:00 3: get Kalender_Kueche summary yyy: 21.0\,19.0
2013.11.04 13:01:00 2: CUL_HM set hz.kueche desired-temp 21.0\
2013.11.04 13:01:00 3: set hz.kueche desired-temp  : desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 13:01:00 3: HZ.Kueche_aus return value: desired-temp requires parameter: [on|off|5.0..30.0]

Temperatur wird sowohl im Wohnzimmer als auch in der Küche korrekt gesetzt (obwohl noch ein"\" dran hängt - warum kommt in der Küche eine Fehlermeldung, im Wohnzimmer nicht? Das notify ist bei beiden identisch aufgebaut.

Liebe Grüße

Markus

martinp876

Hallo Markus,

split ist kein FHEM kommando sondern einfach perl -also musst du dort suchen.

\ ist das "nehme explizit" Zeichen. Das nachfolgende wird nicht interpretiert. Wenn du es in "" packst funktioniert es ähnlich (nicht gleich!).

Gruss Martin

juelich

Also ich habe nochmal bei PERL nachgeschaut, die Syntax ist tatsächlich wie von mir verwendet split(/ / ...)  und nicht split(" " ...).
Im Log sieht man ja auch, das die Splitfunktion korrekt funktioniert:

2013.11.04 13:35:00 3: get Kalender_Kueche summary xxx: 18 21

Damit wird der Kalendereintrag geholt.

2013.11.04 13:35:00 2: CUL_HM set hz.kueche desired-temp 18

Scheinbar wurde die 18 korrekt extrahiert und als desired Temperatur gesetzt.

2013.11.04 13:35:00 3: set hz.kueche desired-temp  : desired-temp requires parameter: [on|off|5.0..30.0]
2013.11.04 13:35:00 3: HZ.Kueche_aus return value: desired-temp requires parameter: [on|off|5.0..30.0]

Jezt kommen die Fehlermeldungen, die ich nicht nachvollziehen kann. Gebe ich denselben Befehl per Hand ein, gibt es keine Fehlermeldung. Auch im Wohnzimmer mit demselben Notify gibt es keine Fehlermeldungen.
Nur in Küche und Bad.

Ich bin tatsächlich etwas ratlos, aber immerhin werden die Thermostate ja korrekt gestellt, ohne die Einträge im Log wäre mir das ja gar nicht aufgefallen.

Liebe Grüße

Markus

betateilchen

Zitat von: juelich am 04 November 2013, 13:42:52Also ich habe nochmal bei PERL nachgeschaut, die Syntax ist tatsächlich wie von mir verwendet split(/ / ...)

aber in Deinen oben zitierten notifies steht: ... split(/,,fhem( ...

da fehlt irgendwo ein /
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

juelich

#509
Zitat von: betateilchen am 04 November 2013, 13:49:35
aber in Deinen oben zitierten notifies steht: ... split(/,,fhem( ...

da fehlt irgendwo ein /

Du hast recht, ich hatte heute Morgen ein wenig rumexperimentiert und verschiedene Varianten durchgespielt, korrekt ist:

split(/ /,fhem("get Kalender_Kueche summary $uid")) mit einem Space als Trennzeichen wie in Deinem Skript,Betateilchen

Bei Dir sah das Ganze so aus:

my ($actor,$dtemp,undef)= split(/ /,fhem("get Kalender_Heizung summary $uid")); if(defined $actor) { fhem("set $actor desired-temp $dtemp")

Da ich für jedes Zimmer einen eigenen Kalender habe, brauche ich den Actor nicht, sondern kann die Geräte direkt ansprechen.
Aber irgendwo sitzt da ein Fehler.

Viele Grüße

Markus