Android Wecker -> Fhem Wecker

Begonnen von docb, 24 September 2017, 23:24:49

Vorheriges Thema - Nächstes Thema

docb

Hallo,
ich habe vor einiger Zeit mal einen einfach Wecker für Fhem reingestellt https://forum.fhem.de/index.php/topic,30733.msg233171.html#msg233171.
Nachdem ich die Lösung nicht so befriedigend fand, da ich einfach nur den Wecker auf meinem Android-Smartphone stellen will, hier die Lösung: Wecker am Handy stellen und Fhem arbeitet damit ;-)

Ihr braucht erstmal Automagic (das braucht man auch für AMAD - https://wiki.fhem.de/wiki/AMAD):
https://play.google.com/store/apps/details?id=ch.gridvision.ppam.androidautomagic
Dann fügt ihr dort folgenden Flow ein, ändert aber vorher
- den Namen Eures WLANs - EUERWLANNAME
- Eure IP - EUREIP
- Euren CSRF-Token (findet ihr im WEB-Device unter csrfToken) - EUERCSRF

Dann das ganze als xml Datei speichern und in Automagic einfügen. Dann noch unbedingt auf den ersten Knoten klicken "App Task Beendet:" und dort die Berechtigung setzen


<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<data version="1.34.0">
-<trigger type="app_task_ended">
<useDefaultName>true</useDefaultName>
<name>App Task Beendet: com.android.deskclock</name>
<enabled>true</enabled>
<method>CLASSIC</method>
<packageNameFilter>com.android.deskclock</packageNameFilter>
</trigger>

-<condition type="expression">
<useDefaultName>true</useDefaultName>
<name>Expression: next_alarm == null</name>
<expression>next_alarm == null</expression>
</condition>

-<condition type="wifi_connected">
<useDefaultName>true</useDefaultName>
<name>WLAN Verbunden: EUERWLANNAME</name>
<all>false</all>
<ssidList>EUERWLANNAME</ssidList>
</condition>

-<action type="notification_screen">
<useDefaultName>true</useDefaultName>
<name>Benachrichtigung auf Bildschirm: Alarm wird in FHEM gelöscht</name>
<showText>true</showText>
<text>Alarm wird in FHEM gelöscht</text>
<widgetName/>
<width>200</width>
<height>250</height>
<stretchToFillArea>false</stretchToFillArea>
<opacity>1.00</opacity>
<durationLong>false</durationLong>
<customPosition>false</customPosition>
<gravityType>TOP_LEFT</gravityType>
<xOffset>0</xOffset>
<yOffset>0</yOffset>
</action>

-<action type="notification_screen">
<useDefaultName>true</useDefaultName>
<name>Benachrichtigung auf Bildschirm: Alarm  {alarm} wird an FHEM gesendet</name>
<showText>true</showText>
<text>Alarm  {alarm} wird an FHEM gesendet</text>
<widgetName/>
<width>200</width>
<height>250</height>
<stretchToFillArea>false</stretchToFillArea>
<opacity>1.00</opacity>
<durationLong>false</durationLong>
<customPosition>false</customPosition>
<gravityType>TOP_LEFT</gravityType>
<xOffset>0</xOffset>
<yOffset>0</yOffset>
</action>

-<action type="http_request">
<useDefaultName>true</useDefaultName>
<name>HTTP Request: GET http://EUREIP:8083/fhem?cmd=set%20bb_alarm%20Aus&fwcsrf=EUERCSRF speichern in response</name>
<url>http://EUREIP:8083/fhem?cmd=set%20bb_alarm%20Aus&fwcsrf=EUERCSRF</url>
<verifyCertificates>true</verifyCertificates>
<basicAuthentication>false</basicAuthentication>
<username/>
<clientCert>false</clientCert>
<clientCertPath/>
<httpMethod>GET</httpMethod>
<httpContentType>X_WWW_FORM_URLENCODED</httpContentType>
<contentType>text/plain</contentType>
<generalTextData/>
<formFieldList>Lastname=XYZ,Firstname=ABC</formFieldList>
<uploadFieldName>upload_field</uploadFieldName>
<uploadFilePath/>
<timeout>60000</timeout>
<setCustomHTTPHeaders>false</setCustomHTTPHeaders>
<customHTTPHeaders/>
<storeInVariable>true</storeInVariable>
<variable>response</variable>
<path>/storage/emulated/0/Download/file.bin</path>
<followRedirects>true</followRedirects>
</action>

-<action type="http_request">
<useDefaultName>true</useDefaultName>
<name>HTTP Request: GET http://EUREIP:8083/fhem?cmd=set%20bb_alarm%20{alarm}&fwcsrf=EUERCSRF speichern in response</name>
<url>http://EUREIP:8083/fhem?cmd=set%20bb_alarm%20{alarm}&fwcsrf=EUERCSRF</url>
<verifyCertificates>true</verifyCertificates>
<basicAuthentication>false</basicAuthentication>
<username/>
<clientCert>false</clientCert>
<clientCertPath/>
<httpMethod>GET</httpMethod>
<httpContentType>X_WWW_FORM_URLENCODED</httpContentType>
<contentType>text/plain</contentType>
<generalTextData/>
<formFieldList>Lastname=XYZ,Firstname=ABC</formFieldList>
<uploadFieldName>upload_field</uploadFieldName>
<uploadFilePath/>
<timeout>60000</timeout>
<setCustomHTTPHeaders>false</setCustomHTTPHeaders>
<customHTTPHeaders/>
<storeInVariable>true</storeInVariable>
<variable>response</variable>
<path>/storage/emulated/0/Download/file.bin</path>
<followRedirects>true</followRedirects>
</action>

-<action type="init_variable_next_alarm">
<useDefaultName>true</useDefaultName>
<name>Initialisiere Variable Nächster Alarm: Variable next_alarm</name>
<variable>next_alarm</variable>
</action>

-<action type="script">
<useDefaultName>true</useDefaultName>
<name>Script: alarm="{{next_alarm},dateformat,HH:mm}" ;</name>
<script>alarm="{{next_alarm},dateformat,HH:mm}" ;</script>
</action>

-<flow type="flow">
<name>Wecker2Fhem</name>
<enabled>true</enabled>
<executionPolicy>PARALLEL</executionPolicy>

-<triggercontainer y="52.499996" x="175.00003" id="t1">
<trigger>App Task Beendet: com.android.deskclock</trigger>
</triggercontainer>
<conditioncontainer y="87.49997" x="-140.0" id="t2">WLAN Verbunden: EUERWLANNAME</conditioncontainer>
<actioncontainer y="262.50018" x="-139.99986" id="t3">Initialisiere Variable Nächster Alarm: Variable next_alarm</actioncontainer>
<actioncontainer y="822.49994" x="-174.99991" id="t4">Benachrichtigung auf Bildschirm: Alarm  {alarm} wird an FHEM gesendet</actioncontainer>
<actioncontainer y="717.49994" x="280.00018" id="t5">Benachrichtigung auf Bildschirm: Alarm wird in FHEM gelöscht</actioncontainer>
<actioncontainer y="507.5" x="-175.0" id="t6">Script: alarm="{{next_alarm},dateformat,HH:mm}" ;</actioncontainer>
<conditioncontainer y="262.49994" x="315.00006" id="t7">Expression: next_alarm == null</conditioncontainer>
<actioncontainer y="647.5" x="-174.99976" id="t8">HTTP Request: GET http://EUREIP:8083/fhem?cmd=set%20bb_alarm%20{alarm}&fwcsrf=EUERCSRF speichern in response</actioncontainer>
<actioncontainer y="542.49976" x="280.00024" id="t9">HTTP Request: GET http://EUREIP:8083/fhem?cmd=set%20bb_alarm%20Aus&fwcsrf=EUERCSRF speichern in response</actioncontainer>
<connection type="NORMAL" targetPosition="NORTH" sourcePosition="SOUTH" to="t2" from="t1"/>
<connection type="TRUE" targetPosition="NORTH" sourcePosition="SOUTH" to="t3" from="t2"/>
<connection type="NORMAL" targetPosition="NORTH" sourcePosition="SOUTH" to="t7" from="t3"/>
<connection type="NORMAL" targetPosition="NORTH" sourcePosition="SOUTH" to="t8" from="t6"/>
<connection type="FALSE" targetPosition="NORTH" sourcePosition="SOUTH" to="t6" from="t7"/>
<connection type="TRUE" targetPosition="NORTH" sourcePosition="SOUTH" to="t9" from="t7"/>
<connection type="NORMAL" targetPosition="NORTH" sourcePosition="SOUTH" to="t4" from="t8"/>
<connection type="NORMAL" targetPosition="NORTH" sourcePosition="SOUTH" to="t5" from="t9"/>
</flow>
</data>


Dann braucht ihr noch in Fhem einen Dummy (hier im Beispiel bb_alarm):
define bb_alarm dummy

und schließlich noch ein AT, welches ihr nach Belieben verfeinern könnt:
define no_bb_alarm notify bb_alarm {Wecker("bb");}

Und einen Eintrag in Eurer 99_myUtils.pm:

sub
Wecker($)
{
my ($who) = @_;
my $weckzeit;
my $heizzeit_beginn;
if (Value("at_".$who."_alarm_Heiz") ne "") {fhem ("delete at_".$who."_alarm_Heiz");}
if (Value("at_".$who."_alarm_Weck") ne "") {fhem ("delete at_".$who."_alarm_Weck");}
if (Value($who."_alarm") ne "Aus") {
  $weckzeit = Value($who."_alarm");
   $heizzeit_beginn = TU_Get_Decrement($weckzeit.":00","00:30:00");
   fhem ("define at_".$who."_alarm_Heiz at ".$heizzeit_beginn." set BA_Fussbodenheizung on-for-timer 1800;; set BA_Thermostat_Climate desired-temp 22.5");
   fhem ("define at_".$who."_alarm_Weck at ".$weckzeit." set HUEBridge_HUEDevice2 hue 14922;; set Yamaha_Z2 on;; set Yamaha_Z2 input spotify;;");
}
}


Ihr könnt das natürlich nach belieben anpassen und auch alles gleich in das AT reinschreiben (im AT statt Wecker("bb") direkt den Inhalt ohne die ersten 4 Zeilen und ohne die letzte }, dazu alle $who variablen mit dem Echtnamen ersetzen. Aber nachdem ich das gleiche auch bei meiner Frau installiert habe, soll es eben zwei unterschiedliche Wecker geben (einen bb und einen ca).

Außerdem braucht ihr noch die Zeitfunktion TU_Get_Decrement - die gibt es hier im Anhang des ersten Posts - 99_TimeUtils.pm  https://forum.fhem.de/index.php?topic=14449.0

Viel Spaß damit und viele Grüße
doc
I love FHEM!

CoolTux

Guten Morgen,

Kurze Frage. Gibt es einen bestimmten Grund warum Du nicht direkt auf die Alarm Readings vom AMAD Device triggerst und den Weg von oben gewählt hast?


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

docb

Guten Morgen auch,
ja, bei mir läuft auf dem Handy nur der eine Flow (ich hoffe damit den Akku nicht unnötig zu belasten) und da brauche ich AMAD eigentlich auch nicht. AMAD läuft bei mir nur auf dem Tablet.
Viele Grüße
I love FHEM!

CoolTux

Alles klar. Das macht Sinn. Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net