FHEM Forum

FHEM => Automatisierung => Thema gestartet von: grossmaggul am 12 Februar 2018, 10:56:44

Titel: Lichtsteuerung durch Homestatus
Beitrag von: grossmaggul am 12 Februar 2018, 10:56:44
Hallo,

ich habe ein kleines programmiertechnisches Problem, vielleicht kann mir ja jemand auf die Sprünge helfen.
In meinem Wohnzimmer werden verschiedene Lampen bei Dämmerung über das Twilight Modul eingeschaltet und Nachts zu einer bestimmten Zeit(1:00Uhr) ausgeschaltet.

Das Ganze habe ich mit dem Homestatus gekoppelt, ich habe einen Schalter in der Haustür, wenn ich abschließe werden die Lampen im Wohnzimmer ausgeschaltet und sollen wieder eingeschaltet werden, wenn die Haustüre aufgeschlossen wird. Aber eben nur dann, wenn es auch der Tageszeit entsprechend eingeschaltet gewesen wäre und da ist mein Problem.
Ich habe das folgendermaßen versucht zu lösen:
home_status:da set wz.light_on_sunset active ;
set wz.alle_lampen_aus active ;
{ if((time()<"01:00") && (ReadingsVal("zwielicht","light",undef) < 5))
{ fhem ("set wz.alle on");; }}

(wz.alle ist ein Dummy, der den on/off Status der Lampen enthält)

So wie es oben steht, funktioniert es nicht wie gewünscht, die Lampen werden zwar beim Verlassen des Hauses ausgeschaltet, aber nicht mehr eingeschaltet, wenn man wieder innerhalb des Zeitfensters "Dämmerung bis 1:00 Uhr" nach Hause kommt.
Ich vermute die Zeitfunktion stimmt nicht, da aber meine Programmierkenntnisse nur rudimentär ausgebildet sind weiß ich nicht wie ich das lösen kann.
Irgendjemand eine Idee?

grossmaggul
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: Prof. Dr. Peter Henning am 12 Februar 2018, 11:51:42
Nun, die beste Lösung wäre, seine "rudimentär ausgebildeten Programmierkenntnisse" zu erweitern. Wir sind nämlich damit auch nicht geboren worden und mussten das ebenfalls tun.

Tipp: http://wiki.selfhtml.org/wiki/Perl

LG

pah
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: grossmaggul am 12 Februar 2018, 14:24:09
ZitatNun, die beste Lösung wäre, seine "rudimentär ausgebildeten Programmierkenntnisse" zu erweitern.
Die beste Lösung wäre gewesen, wenn es einem zuviel ist zu helfen, gar nix zu schreiben.

ZitatWir sind nämlich damit auch nicht geboren worden und mussten das ebenfalls tun.
Und natürlich hast Du das von heute auf morgen gelernt und das alles ganz alleine, toll!
Wenn man hier nur Hilfe bekommt, wenn man ein Perl-, HTML-, CSS-, Python-, Java-, Javscript-Crack ist, dann frage ich mich natürlich wofür dieses Forum dann gut sein soll.

Ich wollte übrigens keine Lösung auf dem Präsentierteller sondern hätte mir gewünscht, daß jemand mit besseren Programierkenntnissen als ich, mal schaut, wo da der Fehler liegen könnte.

Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: Otto123 am 12 Februar 2018, 14:47:57
Hi,

Du müsstest als erstes noch dazu sagen was Dein Code eigentlich ist. Dazu ist ein list prinzipiell am Besten, da sieht man am meisten. So ein Stück Programmcode, da muss man zuviel raten.
Das ist ein notify? Der trigger ist home_status:da der Event also da? Kommt den der Event wenn Du gehst und wenn Du kommst?

Ein notify macht genau eine Aktion beim trigger, Du spulst also eine Reihe von Befehlen ab. Soll das nur fürs einschalten sein?

Was gibt Dir ein {time()}in der FHEM Kommandozeile zurück? Beantwortet das Deine letzte Frage?

Schau mal hier (https://wiki.fhem.de/wiki/DevelopmentModuleAPI#Time_.2F_Timestamp), welche Zeit Variablen/Funktionen Dir FHEM zur Verfügung stellt.
Gruß Otto
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: Prof. Dr. Peter Henning am 12 Februar 2018, 15:16:40
Zitatwofür dieses Forum dann gut sein soll
Sicher nicht dafür, elementare algorithmische Kenntnisse zu vermitteln. Denn dass
Zitattime()<"01:00"
nichts Sinnvolles ist, erkennt man dann schon selbst.

Im Übrigen war der Tipp ernst gemeint - sonst landet jede Codezeile wieder als "kleines programmtechnisches Problem" wieder hier im Forum.

Also locker bleiben und wirklich mal ein paar Seiten lesen.

pah
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: grossmaggul am 12 Februar 2018, 17:18:55
Danke Otto,

für Deine Antwort!
Sorry, das hatte ich vergessen, es ist ein notify und ist nur für's einschalten zuständig.

Danke für den Link, das schaue ich mir mal an.

ZitatBeantwortet das Deine letzte Frage?
Ja.

ZitatDazu ist ein list prinzipiell am Besten, da sieht man am meisten.
Auch wenn dem Herrn Professor jetzt alle Haare und Zähne ausfallen, ich habe keine Ahnung wie man das macht, aber ich werde mal suchen.


Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: Prof. Dr. Peter Henning am 12 Februar 2018, 18:09:47
ZitatAuch wenn dem Herrn Professor jetzt alle Haare und Zähne ausfallen
Da überschätzt aber jemand seine Bedeutung bei weitem.

Noch ein Tipp: CommandRef lesen.

pah
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: grossmaggul am 12 Februar 2018, 18:36:56
ZitatNoch ein Tipp: CommandRef lesen.
Noch ein Tipp, Arroganz runterschrauben.
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: binford6000 am 12 Februar 2018, 18:58:38
ZitatIrgendjemand eine Idee?
Ich hätte da noch eine. Schau mal hier rein:
https://forum.fhem.de/index.php/topic,76660.msg685655.html#msg685655 (https://forum.fhem.de/index.php/topic,76660.msg685655.html#msg685655)
isInTime('18:00-22:00')
leistet bei mir treue Dienste. Gibts auch für eine Datumsabfrage im gleichen Thread.
VG Sebastian
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: CoolTux am 12 Februar 2018, 19:23:42
Zitat von: binford6000 am 12 Februar 2018, 18:58:38
Ich hätte da noch eine. Schau mal hier rein:
https://forum.fhem.de/index.php/topic,76660.msg685655.html#msg685655 (https://forum.fhem.de/index.php/topic,76660.msg685655.html#msg685655)
isInTime('18:00-22:00')
leistet bei mir treue Dienste. Gibts auch für eine Datumsabfrage im gleichen Thread.
VG Sebastian
In der Regel befürworte ich solche Tips sehr. Allerding scheint es dem Threadersteller noch am rudimentären Wissen zu mangeln. Daher werden hier weitere Fragen nicht lange auf sich warten lassen.


home_status:da set wz.light_on_sunset active ;
set wz.alle_lampen_aus active ;
{ if((time()<"01:00") && (ReadingsVal("zwielicht","light",undef) < 5))
{ fhem ("set wz.alle on");; }}

Das hier stimmt vorn und hinten nicht. Bitte eigene Dir Wissen zum Thema Notify an.
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: binford6000 am 12 Februar 2018, 19:42:37
ZitatAllerding scheint es dem Threadersteller noch am rudimentären Wissen zu mangeln. Daher werden hier weitere Fragen nicht lange auf sich warten lassen.
Das stimmt wohl. Wie Otto bereits geschrieben hat, würden die lists der devices helfen...  ;)
VG Sebastian
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: Otto123 am 12 Februar 2018, 21:02:58
list ist sehr vielfältig, vor allem wenn man es mit anderen Dingen kombiniert, z.B. devspec (https://fhem.de/commandref_DE.html#devspec). Damit wird es quasi die Suche in Deinem FHEM.
probiere mal diesen Befehl in der FHEM Kommandozeile.
list TYPE=notify
Da dürfte dein notify auch auftauchen. Dann nimmst Du den Namen Deines notify und schreibst ihn hinter das list. Die Ausgabe die da kommt mögen hier alle am liebsten als Info.  :D

Gruß Otto
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: Prof. Dr. Peter Henning am 12 Februar 2018, 22:04:43
Manche Leute haben einfach zu viele Buchstaben im Pseudonym.


*gg*


pah
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: grossmaggul am 13 Februar 2018, 00:52:00
Erstmal danke für die Antworten.

Um das mal klar zu stellen, ich habe schon einiges gelesen, auch in der commandref, ich finde es aber nachwievor schwierig, das alles unter einen Hut zu bekommen und die Zusammenhänge herzustellen. Und es braucht halt Zeit, da durch zu steigen, die ich aber nicht immer habe und es soll auch Leute geben, die solche komplexen Dinge nicht so schnell durchblicken.

Wenn mir jemand so etwas schreibt: "Das hier stimmt vorn und hinten nicht. " Dann wäre es nett, wenn man dann auch schreibt, was da vorne und hinten nicht stimmt und nicht darauf hinweist sich notify Wissen anzueignen, denn ich war eigentlich der Meinung, daß ich das habe.
Denn wenn ich in der commandref zu notify lese:
"Führt eine oder mehrere Anweisungen aus, wenn ein Event generiert wurde, was dem <Suchmuster> (Gerätename oder Gerätename:Event) entspricht."

Dann ist es zumindest aus meiner Sicht genau das, was mein notify macht: "Wenn das Event "da" eintritt werden verschiedene Anweisungen ausgeführt."

Ich danke Otto für seine Geduld und für alle die es noch interessiert so sieht das Listing aus:

ZitatInternals:
   DEF        home_status:da set wz.light_on_sunset active ; set wz.alle_lampen_aus active ;
{ if((time()<"00:15") && (ReadingsVal("zwielicht","light",undef) < 5)) { fhem ("set wz.alle on");; }}
   NAME       da
   NOTIFYDEV  home_status
   NR         56
   NTFY_ORDER 50-da
   REGEXP     home_status:da
   STATE      2018-02-12 16:12:40
   TYPE       notify
   READINGS:
     2018-02-12 10:38:28   state           active
Attributes:
   room       9.6_HomeStatus
   verbose    3
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: CoolTux am 13 Februar 2018, 06:25:51
Ok fangen wir mit dem einfachsten an.
Jeder noch so nicht funktionierende Mist wird in FHEM in einem Logfile ausgeworfen. Sowas nennt man Fehlermeldung. Da kannst Du Mal schauen und hier angeben.
Als zweites hast Du in Deinem Notify Devices stehen die Du schaltest welche du hier als list Info mit angeben solltest.

Nun zum wichtigen. Dein Beispielcode scheint direkt aus der Konfig zu sein. Es empfiehlt sich immer über das FHEMWEB zu arbeiten. Unter den Details zum Notify einfach auf DEF drücken. Da bekommst du eine Syntaxprüfung Deines Codes.

Unter FHEM gibt es FHEM Befehle, wenn das nicht reicht kann man Perlcode verwenden. Beides zu mischen ist nicht gut, daher sagt man sofern man auch nur ein bisschen Perlcode verwendet geht man und bleibt man in der Perlebene. Das macht man mit { }

Du solltest also alle Deine fhem Befehle in Perl schreiben.


home_status:da {
  fhem("set wz.light_on_sunset,wz.alle_lampen_aus active");
  if( (time()<"00:15") && (ReadingsVal("zwielicht","light",undef) < 5)) {
         fhem ("set wz.alle on");
    }
}


Natürlich stimmt der Zeitenvergleich noch lange nicht. Tip: im Notify stehen Dir die globalen Variablen $hour und $min zur Verfügung.
Ansonsten gebe ich Paar Recht, sobald Du mehr machen möchtest wie einfache Schaltvorgänge lohnt es sich Perlwissen an zu eignen.

Über das Konstrukt was Du da warum schaltest lass ich mich jetzt nicht aus. Sieht so aus als aktivierst Du weitere Notifys


Grüße
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: grossmaggul am 13 Februar 2018, 08:49:07
Danke.

ZitatDein Beispielcode scheint direkt aus der Konfig zu sein.
Nein, ist aus dem DEF des notify aus FHEMWEB.

ZitatBeides zu mischen ist nicht gut
Warum? Das findet man hier und auch anderswo immer wieder. (Gut, d.h. nicht, daß es richtig ist)

ZitatNatürlich stimmt der Zeitenvergleich noch lange nicht.
Ja, das weiß ich, deshalb habe ich hier ja gefragt.

ZitatTip: im Notify stehen Dir die globalen Variablen $hour und $min zur Verfügung.
Danke, damit kann ich dann schonmal was anfangen.

ZitatSieht so aus als aktivierst Du weitere Notifys
Nein, "wz.light_on_sunset" und "wz.alle_lampen_aus" sind "at"s und, wie ich bereits schrieb, "wz.alle_on" ist ein dummy.

Um das noch mal klarzustellen, das "Konstrukt" funktioniert ja, nur der Zeitvergleich eben nicht so wie gewünscht.
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: CoolTux am 13 Februar 2018, 09:23:48
Dann sollte es ja mit dem Wissen das es globale Variablen $hour und $min gibt nun kein Problem mehr sein.
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: grossmaggul am 13 Februar 2018, 10:03:18
Schaumerma.;-)
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: hsepm am 13 Februar 2018, 10:08:13
Hallo zusammen,

ich glaube, hier bietet sich ein DOIF an. So habe ich es gelöst. Leider komme ich gerade nicht an den Code ran, da im Büro.

Sinngemäß:
- [Homestatus] triggert das DOIF, in deinem Falle ggf auch die Uhrzeit
- In die Bedingung Homestatus = Zuhause (oder Home oder was auch immer) eine und-Verknüpung auf Twilight:light, vorangestelltes Fragezeichen, damit Twilight nicht laufend triggert

Viele Grüße,
Holger
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: Otto123 am 13 Februar 2018, 11:34:50
Zitat von: CoolTux am 13 Februar 2018, 09:23:48
Dann sollte es ja mit dem Wissen das es globale Variablen $hour und $min gibt nun kein Problem mehr sein.
Im Übrigen stand der Hinweis auf die Zeitvariablen schon in meiner Antwort in #6 ich hoffe das war irgendwie erkennbar.
Ich gebe mir immer Mühe und will den Text schön machen, vielleicht ist das verkehrt und nur die großen erkennbaren Links werden auch gelesen ???

Gruß Otto
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: grossmaggul am 13 Februar 2018, 11:55:52
Zitatich hoffe das war irgendwie erkennbar.
Ja,war es.
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: Otto123 am 13 Februar 2018, 12:06:34
Nun ist Dein Zeitvergleich "um Mitternacht" auch eine echte Herausforderung für den Anfang.  ;)
Aber $hour < 1 passt doch schon mal als Ansatz oder wie kommst Du voran?
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: grossmaggul am 13 Februar 2018, 14:13:27
Zitatoder wie kommst Du voran?
Noch gar nicht, weil ich noch dabei bin mich schlau zu machen und auch nur hin und wieder Zeit dazu finde mich drum zu kümmern.
Titel: Antw:Lichtsteuerung durch Homestatus
Beitrag von: grossmaggul am 14 Februar 2018, 15:33:55
Klappt jetzt, danke an fast alle und besonders an Otto!