Hallo,
ich möchte ein Device mittels Google Kalender schalten. Der DeviceName setzt sich aus "Device-Art" und "Lokation" zusammen, da die Devices in mehreren Räumen vorkommen. Das Device heißt "Lampe" und die Lokation z.B. "Schlafzimmer" Der Device Name somit "Lampe_Schlafzimmer"
Der Kalendereintrag heißt nun "Lampe" und als Ort ist "Schlafzimmer" angegeben. ICh kann dies nun so in fhem auslesen:
define LampeOn notify HomeControl:modeStarted.* { my $reading="%EVTPART0";; my $uid= "%EVTPART1";; my $device= fhem("get HomeControl summary $uid");;
my $location= fhem("get HomeControl location $uid");; if(defined $device) { fhem("set $device on") } }
Mein Problem ist der letzte Teil der Anweisung "if (defined $ device...") Wie setze ich aus $device und $location meinen Aktonamen zusammen? Wie "addiere ich die beiden Variablen inklusive "Unterstrich" zu einem Devicenamen? Komme damit nicht weiter...
Danke,
djhans.
streiche:
if(defined $device) { fhem("set $device on") }
setze:
if(defined $device) { my $d="$device_$location"; fhem("set $d on") }
(und achte darauf, dass danach nochmal eine geschweifte Klammer zu kommt!)
Hi,
uups! So einfach ist das!
Besten Dank,
Christian.
Moin,
ich habe das ein wenig umgeschrieben, aber irgendwo ist ein Fehler drin:
define LightOn notify HomeControl:modeStarted.* { my $reading="%EVTPART0";; my $uid= "%EVTPART1";;
my $device= fhem("get HomeControl summary $uid");;
my $location= fhem("get HomeControl location $uid");; my $d="$device_$location";; if(defined $d) { fhem("set $d on") } }
...finde ihn aber nicht. Der Alarm wird ausgelöst, aber das Gerät schaltet nicht. Der DeviceName scheint nicht zu existieren. Den gibt es aber und er heisst halt Licht_Schlafzimmer, wobei Licht in summary und Schlafzimmer in Ort des Kalenders steht. Der zusammengesetzte Name Klappt nicht. Wenn ich den kompletten Device Namen in summary schreibe und die Sache mit der Variable d weglasse (also direkt device verwende, siehe oben) funzt es.
djhans
Hallo,
versuch mal das:
my $d="$device"."_"."$location"
Grüsse
Zitat von: djhans am 30 Januar 2014, 15:54:06ich habe das ein wenig umgeschrieben,
Ja, aber verstanden, was Du da tust, hast Du nicht. Das if muss immer auf $device prüfen, nicht auf $d.
teste mal diese Variante:
Damit solltest Du im Logfile einen Hinweis finden, welcher Gerätename zum Schalten verwendet wird.
Code entfernt, man sollte einfach sowas nicht von unterwegs tippen, solche Screen-Tastaturen sind einfach Mist.
..ja das stimmt, verstehe es noch nicht, habe es aber mal 1:1 eingebaut.
2014.01.30 16:33:00 3: LightOn return value: syntax error at (eval 257) line 1, near "DEBUG " D:$d""
hier noch mal der Teil aud dem DEF-Bereich von LightOn:
HomeControl:modeStarted.* { my $reading="%EVTPART0"; my $uid= "%EVTPART1";
my $device= fhem("get HomeControl summary $uid");
my $location= fhem("get HomeControl location $uid"); if(defined $device) { my $d='$device'.'_'.'$location'; DEBUG " D:$d"; fhem("set $d on ") } }
djhans
sorry, mein Fehler. Lass das mit dem Debug einfach weg.
so, jetzt nochmal in aller Ruhe und mit einer "richtigen" Tastatur getippt...
if(defined $device) { my $d=$device.'_'.$location; fhem("set $d on") }
Die debug-Meldung brauchst Du nicht, eigentlich solltest Du im Log eine Fehlermeldung finden, in welcher der Devicename auch drinsteht.
Hallo,
Besten Dank, es funzt! Jetzt muss ich nur mal gucken, ob ich noch Parameter in den Google Kalender packe. Dazu eignet sich das Beschreibungsfeld. Da könnte man die Helligkeit der Lampe oder für das Sonos-System die Playliste hinterlegen, die abgespielt werden soll. Ob dies alles Sinn macht, weiss ich noch nicht!
Gruß,
Christian
Hallo,
ZitatOb dies alles Sinn macht, weiss ich noch nicht!
Klar macht es das - dafür ist ein Automatisierungssystem gedacht.
DU musst nur die empfagenen Daten entsprechend verwerten.
Grüße
Hi,
ja, das schon! Ich frage mich nur, ob es Sinn macht, alles über den google Kalender zu steuern, oder seine Daten besser im lokalen Netz lässt. Sollte eigentlich reichen, die lokalen Kalender von fhem zu nutzen....Weiß ich halt noch nicht! Ist aber toll, dass es funzt....
Christian
Hallo,
ob du deine Ferien/Familienfeiern/Urlaub was auch immer in der Cloud speicherst oder zuhause musst du entscheiden.
Ich nutze die holiday-Dateien von FHEM - so weiss Google/... schonmal nicht wann ich frei habe und wann ich arbeiten gehe 8)
Grüsse
@djhans
Logisch macht das Sinn
Was du jetzt mit Betateilchens und Puschels Hilfe gebastelt hast, ist eine äußerst einfach zu bedienende Anwesenheitssimulation ;)
Das ist nämlich genial.
Solltest du unter Codeschnipsel einfach posten und ins Wiki stellen :)
Hallo,
Zitatund Puschels Hilfe gebastelt hast,
Nene - betateilchen hat den Code gepostet, nicht ich.
Grüsse
Vorsicht!
Es ist normalerweise einfacher umzusetzen, mehrere Parameter in EIN Feld im Kalender zu schreiben und dieses Feld in fhem aufzusplitten, als zu viele Felder aus dem Kalender zu entnehmen.
Ich verwende beispielsweise für die Heizungssteuerung NUR das "Betreff"-Feld des Kalendereintrags.
Dort steht dann zum Beispiel drin:
Heizung_Wohnzimmer 21 16
Und wenn der Termin beispielsweise von 18:00 bis 22:00 angegeben wird, werden diese drei Werte so interpretiert:
"Stelle die Heizung im Wohnzimmer um 18 Uhr auf 21 Grad und um 22 Uhr zurück auf 16 Grad."
Der Vorteil ist, dass sich dann auch mit "get <KalenderName> text all" die gesamte Betreffzeile ausgegeben wird - im Gegensatz zu den anderen Feldern, die im Google-Kalender zur Verfügung stehen, die aber nicht im Kalendermodul berücksichtigt werden.