{"id":58,"date":"2015-01-11T18:34:09","date_gmt":"2015-01-11T18:34:09","guid":{"rendered":"http:\/\/carsten.familie-schumann.info\/blog\/?p=58"},"modified":"2015-01-11T18:34:09","modified_gmt":"2015-01-11T18:34:09","slug":"fhem-zufaellige-zeit-offsets","status":"publish","type":"post","link":"https:\/\/carsten.familie-schumann.info\/blog\/2015\/01\/fhem-zufaellige-zeit-offsets\/","title":{"rendered":"FHEM: Zuf\u00e4llige Zeit-Offsets"},"content":{"rendered":"<p>M\u00f6chte man sein Haus automatisieren, stehen einem ein ganzer Zoo von verschiedenen Systemen zur Verf\u00fcgung: HomeMatic, FS20, EnOcean, Peha, KNX und viele mehr. Leider haben die Steuerzentralen der einzelenen Systeme eins gemeinsam: Sie k\u00f6nnen nur Komponenten des eigenen Systems ansprechen und lassen sich schlecht erweitern. <\/p>\n<p>Daher hat Rudolf Koenig mit einigen anderen Entwicklern eine universelle Hausautomatisierungszentrale entwickelt: <a href=\"http:\/\/fhem.de\/fhem.html\" title=\"FHEM\">FHEM<\/a>. Hiermit lassen sich, wenn man entsprechende Gateways auf die jeweiligen Funksysteme hat, beliebige Systeme anbinden.<\/p>\n<p>M\u00f6chte man Rollos automatisieren, so bietet die Sunset-Funktion einen einfachen Weg, bei Sonnenuntergang die Rollos herunterzufahren. So sorgt der Befehl<\/p>\n<p><code><br \/>\ndefine Zimmer1.Rollo.Herunter at *{sunset(0,\"17:00\",\"22:00\")} set Zimmer1.Rollo off<br \/>\n<\/code><\/p>\n<p>daf\u00fcr, dass das Rollo <em>Kueche.Rollo<\/em> bei Sonnenuntergang heruntergefahren wird, jedoch nicht vor 17:00 und nicht nach 22:00. <\/p>\n<p>Macht man das f\u00fcr alle Rollos auf diesem Weg, ergibt sich jedoch ein Problem. Das ganze sieht ziemlich automatisiert aus und taugt f\u00fcr keine 5 Pfennig (\u00e4hh&#8230;Cent) als Anwesenheitssimulation. Man w\u00fcrde schlie\u00dflich wenn man anwesend ist, auch nicht alle Rollos gleichzeitig herunterfahren k\u00f6nnen. Praktisch w\u00e4re ein zuf\u00e4lliger Offset. FHEM bietet diese Funktion leider nicht von Haus aus, aber man kann sich schnell so eine Funktion selber bauen:<\/p>\n<pre class=\"brush: perl; title: ; notranslate\" title=\"\">\r\n# Zuf\u00e4lligen Offset auf Zeitstamp addieren\/subtrahieren\r\nsub\r\ntime_random_offset\r\n{\r\n  # Eingangs-Zeitstempel in Variable holen\r\n  my ($timestamp) = shift;\r\n\r\n  # Maximalen Zeitoffset (in Sekunden) in Variable speichern\r\n  my ($maxoffset) = shift;\r\n\r\n  # Zeitstempel in das interne Format konvertieren: 17:30:09 ==&gt; 17.5025\r\n  # Stunden werden als ganze Zahlen gespeichert, minuten als 1\/60 und sekunden als 1\/3600\r\n  my ($t) = hms2h($timestamp);\r\n\r\n  $t += rand()  * $maxoffset \/ 3600;\r\n\r\n  # Zur\u00fcck in HH:MM:SS konvertieren.\r\n  return h2hms_fmt($t);\r\n};\r\n\r\n<\/pre>\n<p>Diese Funktion packt man z.B. in die 99_myUtils.pm (vor das 1;) und l\u00e4dt in der FHEM-Weboberfl\u00e4che mit dem Befehl <strong>reload 99_myUtils.pm<\/strong> die Datei neu. Danach kann man den Rollobefehl wie folgt definieren:<\/p>\n<p><code><br \/>\ndefine Zimmer1.Rollo.Herunter at *{time_random_offset(sunset(0,\"17:00\",\"22:00\"),300)} set Zimmer1.Rollo off<\/p>\n<p>define Zimmer2.Rollo.Herunter at *{time_random_offset(sunset(0,\"17:00\",\"22:00\"),300)} set Zimmer2.Rollo off<br \/>\n<\/code><\/p>\n<p>Nun fahren die Rollos in beiden Zimmern grob gleichzeitig herunter&#8230;z.B. um 17:30 und 17:32, genauso, als w\u00fcrde man die Rollos manuell herunterfahren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>M\u00f6chte man sein Haus automatisieren, stehen einem ein ganzer Zoo von verschiedenen Systemen zur Verf\u00fcgung: HomeMatic, FS20, EnOcean, Peha, KNX und viele mehr. Leider haben die Steuerzentralen der einzelenen Systeme eins gemeinsam: Sie k\u00f6nnen nur Komponenten des eigenen Systems ansprechen und lassen sich schlecht erweitern. Daher hat Rudolf Koenig mit einigen anderen Entwicklern eine universelle&#8230;<br \/><a class=\"read-more-button\" href=\"https:\/\/carsten.familie-schumann.info\/blog\/2015\/01\/fhem-zufaellige-zeit-offsets\/\">Mehr Lesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-58","post","type-post","status-publish","format-standard","hentry","category-programmierung"],"_links":{"self":[{"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/posts\/58","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/comments?post=58"}],"version-history":[{"count":1,"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/posts\/58\/revisions"}],"predecessor-version":[{"id":59,"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/posts\/58\/revisions\/59"}],"wp:attachment":[{"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/media?parent=58"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/categories?post=58"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/tags?post=58"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}