FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: djhans am 30 Januar 2014, 13:53:35

Titel: Aktorname zusammensetzten
Beitrag von: djhans am 30 Januar 2014, 13:53:35
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.
Titel: Antw:Aktorname zusammensetzten
Beitrag von: betateilchen am 30 Januar 2014, 14:02:47
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!)
Titel: Antw:Aktorname zusammensetzten
Beitrag von: djhans am 30 Januar 2014, 14:32:07
Hi,
uups! So einfach ist das!

Besten Dank,
Christian.
Titel: Antw:Aktorname zusammensetzten
Beitrag von: djhans am 30 Januar 2014, 15:54:06
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
Titel: Antw:Aktorname zusammensetzten
Beitrag von: Puschel74 am 30 Januar 2014, 16:05:45
Hallo,

versuch mal das:

my $d="$device"."_"."$location"

Grüsse
Titel: Antw:Aktorname zusammensetzten
Beitrag von: betateilchen am 30 Januar 2014, 16:09:36
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.
Titel: Antw:Aktorname zusammensetzten
Beitrag von: djhans am 30 Januar 2014, 16:35:33
..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
Titel: Antw:Aktorname zusammensetzten
Beitrag von: betateilchen am 30 Januar 2014, 17:09:32
sorry, mein Fehler. Lass das mit dem Debug einfach weg.
Titel: Antw:Aktorname zusammensetzten
Beitrag von: betateilchen am 30 Januar 2014, 18:35:02
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.

Titel: Antw:Aktorname zusammensetzten
Beitrag von: djhans am 30 Januar 2014, 21:14:56
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
Titel: Antw:Aktorname zusammensetzten
Beitrag von: Puschel74 am 30 Januar 2014, 21:48:41
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
Titel: Antw:Aktorname zusammensetzten
Beitrag von: djhans am 30 Januar 2014, 22:30:55
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



Titel: Antw:Aktorname zusammensetzten
Beitrag von: Puschel74 am 31 Januar 2014, 07:17:38
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
Titel: Antw:Aktorname zusammensetzten
Beitrag von: Rince am 31 Januar 2014, 07:51:32
@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 :)
Titel: Antw:Aktorname zusammensetzten
Beitrag von: Puschel74 am 31 Januar 2014, 10:51:16
Hallo,

Zitatund Puschels Hilfe gebastelt hast,
Nene - betateilchen hat den Code gepostet, nicht ich.

Grüsse
Titel: Antw:Aktorname zusammensetzten
Beitrag von: betateilchen am 31 Januar 2014, 11:05:03
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.