In Funktion (Utils99_MeineSteuerung.pm ein "at erstellen

Begonnen von Neeein, 04 März 2015, 10:28:01

Vorheriges Thema - Nächstes Thema

Neeein

Hallo Gemeinde,


ich habe folgendes Problem und bin mit der Suche nicht einig geworden.

Ich bin dabei mir eine Steuerung für meine Brauchwassererwärmung zu basteln. Der Code ist der Übersicht halber ganz am Ende.
Darin möchte ich beim erstmaligem aufruf der ?Funktion? doSolar u.a. folgendes ausführen lassen:

fhem "define $deviceStart at *{sunrise("REAL",+900,"05:30","09:00")} set $deviceDummy aktiv" if(!defined($defs{$deviceStart}));

dieser wird jedoch immer mit der Fehlermeldung

syntax error at ./FHEM/99_UtilsSolarsteuerung.pm line 34, near ""define $deviceStart at *{sunrise("REAL" Illegal octal digit '9' at ./FHEM/99_UtilsSolarsteuerung.pm line 34, at end of line syntax error at ./FHEM/99_UtilsSolarsteuerung.pm line 52, near "}"

quittiert und funktioniert demnach nicht.
Hintergrund ist, das ich nicht alle Dummy ats, etc. mit der Hand erstellen will, dies soll automatisch geschehen, z.B. falls ich weitere Devices, z.B. eine Markise einführen will.

wenn ich das "at" manuell mit den Parametern erstelle klappt es ohne murren.


Vielleicht hat ja jemand eine Idee

##############################################
# $Id: 99_UtilsSolarsteuerung.pm 1932 2015-03-04 10:15:33Z  $
package main;


#sub
#Utils_Initialize($$)
#{
#  my ($hash) = @_;
#}

######## doSolarsteuerung ###############
#
# Prüft ob die Umgebungsvariablen eine Aktivität der Solarpumpe rechtfertigen
# Aufruf: doSolar("<device>")
sub doSolar($) {
my ($device) = @_;
my $weatherdevice = "Weather";
my $readingMaxTemp = "fc1_high_c";
my $cloudCoverage = "condition";
my $triggerTemp = 0;
my $mandatoryTemp = 20;
my $deviceDummy = "D_Solar_".$device; #name for Dummy
my $deviceNotify = "N_".$device; #Name for Notify
my $deviceStart = "at_Solar_".$device."_Start"; #name for at
my $deviceStop = "at_Solar_".$device."_Stop"; #name for at

#Log 3, "##########################################################";
#Log 3, "doSolar: Prüfe Solarbedarf für $device...";
#Log 3, "doSolar: TempHi ist ".ReadingsVal($weatherdevice,$readingMaxTemp, 0)."# (Schwellwerte: $triggerTemp bei sunny oder mostly, sonst $mandatoryTemp )" ;
#Log 3, "doSolar: Clouds ist ".ReadingsVal($weatherdevice,$cloudCoverage, 0);
fhem "define $deviceDummy dummy;attr $deviceDummy webCmd aktiv:inaktiv;set $deviceDummy inaktiv;attr $deviceDummy icon sani_pump" if(!defined($defs{$deviceDummy}));
fhem "define $deviceNotify notify $weatherdevice:condition.* {if (Value('$device') eq 'off' && Value('$deviceDummy') eq 'aktiv' && Value('D_Windschutz') eq 'inaktiv' && Value('D_Unwetter') eq 'inaktiv'){doSolar('KG.Solarpumpe')}};" if(!defined($defs{$deviceNotify})); #Notify.
fhem "define $deviceStart at *{sunrise("REAL",+900,"05:30","09:00")} set $deviceDummy aktiv" if(!defined($defs{$deviceStart}));
fhem "define $deviceStop at *{sunset("CIVIL",-8000,"14:00","20:00")} set $device off;set $deviceDummy inaktiv" if(!defined($defs{$deviceStop}));
if
(((ReadingsVal($weatherdevice,$readingMaxTemp, 0) > $triggerTemp) &&
((ReadingsVal($weatherdevice,$cloudCoverage , 0) =~ m/sunny/)
||
(ReadingsVal($weatherdevice,$cloudCoverage , 0) =~ m/mostly/)
||
(ReadingsVal($weatherdevice,$cloudCoverage , 0) =~ m/clear/)
||
(ReadingsVal($weatherdevice,$cloudCoverage , 0) =~ m/partly/)))
||
(ReadingsVal($weatherdevice,$readingMaxTemp, 0) > $mandatoryTemp)){
#Log 3, "$device an";
fhem "set $device on";
}
else{
#Log 3, "Voraussetzungen für Solarpumpe liegen nicht vor";
}
}

nesges

Zitat von: Neeein am 04 März 2015, 10:28:01
fhem "define $deviceStart at *{sunrise("REAL",+900,"05:30","09:00")} set $deviceDummy aktiv" if(!defined($defs{$deviceStart}));

Das ist syntaktisch falsch. Der ganze String muss in Anführungszeichen eingeschlossen sein, du "unterbrichst" den String durch "innere" Anführungszeichen. IOW: Nutze innerhalb des Strings einfache Anführungszeichen (') oder maskiere die doppelten (\").