Hauptmenü

at in einen at einabuen

Begonnen von mikerl67, 16 September 2015, 15:31:48

Vorheriges Thema - Nächstes Thema

mikerl67

Hallo,

wie kann ich in einem at noch einen at einbauen?
Folgender Hintergrund: Ich schalte eine Homematic Steckdose mit Verbrauchsmessung ein und möchte im nächsten Schritt ermitteln, ob ein Verbraucher anliegt. Wenn nicht, soll die Steckdose wieder ausgeschaltet werden. Leider ist die Schaltvorgang so schnell, dass nach dem einschalten kein Wert gemessen wird. Daher hatte ich die Idee via at die Abfrage ob ein Verbraucher anliegt zu verzögern.

Hier aus dem DEF Editor


+*08:01
{if (ReadingsVal("HR.Waschmaschine.SenPwr","state","")>5)
{(fhem "set HR.Waschmaschine.Sw on") ;;(fhem "set HR.WaschmaschineBetrieb on")}
else
   {if (ReadingsVal("Photovoltaik","Power_average","")>1 && ReadingsVal("Hausverteilung","Power_average","")<8000)
      {(fhem "set HR.Waschmaschine.Sw on") ;; (fhem "set HR.WaschmaschineBetrieb on")}
   }
   {fhem("define delay at +00:02:00" {if (ReadingsVal(HR.Waschmaschine.SenPwr","state","")<5) (fhem "set HR.Waschmaschine.Sw off"))}}
}

Ich habe jetzt über 4 Tage versucht den Fehler zu finden.....leider ohne Erfolg. Der hervorgehoben Teil ist das Problem.

Für Anregungen oder Vorschläge wie ich es andere machen kann wäre ich sehr dankbar!

Viele Grüße Michael

marvin78

Bitte Code-Tags benutzen!!


Da sind sehr viele Fehler drin. Klammern, Anführungszeichen. Das at im at sollte funktionieren, wenn du den Code aufräumst und die Fehler beseitigst. Da fehlen einige Grundlagen.

RomanticBoy83

Ich habe mir mal die mühe gemacht und den Code angesehen. Es war tatsächlich eine wüste Klammersetzung, welche man mit ein wenig Formatierung auch sehen kann.
So sollte es dem Beispielnach funktionieren:
+*08:01{
  if (ReadingsVal("HR.Waschmaschine.SenPwr","state",0) > 5){
    fhem("set HR.Waschmaschine.Sw on, set HR.WaschmaschineBetrieb on");
  }elsif (ReadingsVal("Photovoltaik","Power_average",0) > 1 && ReadingsVal("Hausverteilung","Power_average",0) < 8000){
    fhem("set HR.Waschmaschine.Sw on, set HR.WaschmaschineBetrieb on");
  }
  fhem( "define delay at +00:02:00 {if (ReadingsVal(HR.Waschmaschine.SenPwr","state",0) < 5){fhem("set HR.Waschmaschine.Sw off")}}" )
}

igami

Guck dir mal das DOIF Modul an, dass kann von sich aus mit Verzögerungen arbeiten.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

marvin78

Und jetzt kopiert er den Code und hat noch immer nicht verstanden, was seine Fehler waren....

mikerl67

Hallo,

danke für die vielen Antworten. Das DOIF hatte ich mir angeschaut, bin aber an einer zusätzlichen If Schleife gescheitert. Daher habe ich mit dem at weitergemacht.
Marvin78 hat Recht.....Ich weiss nicht wie die Richtige Formatierung aussieht.
Bisher habe ich immer den Code in Notepad++ vorbereitet und dann in den internen Editor DEF von Fhem kopiert.
Wenn ich den Code von RomanticBoy83 (Vielen Danke für deine Mühe!) kopiere und in den DEF Editor kopiere bekomme ich eine Fehlermeldung:
Wrong timespec, use "
  • [*[{count}]]<time or func>" .
    Der Code wird doch in den internen Editor bearbeitet oder?

    Viele Grüße Michael

mikerl67

Hey...
wenn ich den Code umformatiere kann ich ihn zumindest abspeichern...
so aus dem DEF Editor

+*08:01
{if (ReadingsVal("HR.Waschmaschine.SenPwr","state",0) > 5)
{fhem("set HR.Waschmaschine.Sw on, set HR.WaschmaschineBetrieb on")}
elsif (ReadingsVal("Photovoltaik","Power_average",0) > 1 && ReadingsVal("Hausverteilung","Power_average",0) < 8000)
{fhem("set HR.Waschmaschine.Sw on, set HR.WaschmaschineBetrieb on")}
fhem( "define delay at +00:02:00 {if (ReadingsVal("HR.Waschmaschine.SenPwr","state",0) < 5){fhem("set HR.Waschmaschine.Sw off")}}" )
}
ich teste mal weiter.......
Gruß Michael

mikerl67

Hey,

leider bin ich keinen Schritt weiter und marvin78 hatte Recht. Wenn ich den Code von RomanticBoy83 in den DEF Editor kopiere bekomme ich nur Fehlermeldungen.
Wenn ich aber den Code so formatiere wie ich ihn am Anfang gepostet habe klappt es soweit bis auf den zweiten at Aufruf.


Hier aus dem DEF kopiert.......auch wenn es gruselig Aussieht.....aber das funktioniert:

+*08:01
{if (ReadingsVal("HR.Waschmaschine.SenPwr","state","")>5)
{(fhem "set HR.Waschmaschine.Sw on") ;;(fhem "set HR.WaschmaschineBetrieb on")}
else
   {if (ReadingsVal("Photovoltaik","Power_average","")>1 && ReadingsVal("Hausverteilung","Power_average","")<8000)
      {(fhem "set HR.Waschmaschine.Sw on") ;; (fhem "set HR.WaschmaschineBetrieb on")}
   }
   {if (ReadingsVal("HR.Waschmaschine.SenPwr","state","")<5)
      {(fhem "set HR.Waschmaschine.Sw off") ;;(fhem "set HR.WaschmaschineBetrieb off")}
   }
}

jetzt weiss ich nur nicht, wie ich den Teil von RomanticBoy83 anstatt des letzten if einfüge:

Das raus   

{if (ReadingsVal("HR.Waschmaschine.SenPwr","state","")<5)
      {(fhem "set HR.Waschmaschine.Sw off") ;;(fhem "set HR.WaschmaschineBetrieb off")}
}

und das rein:

fhem( "define delay at +00:02:00 {if (ReadingsVal(HR.Waschmaschine.SenPwr","state",0) < 5){fhem("set HR.Waschmaschine.Sw off")}}" )

Kann mir jemand da weiterhelfen?

Viele Grüße Michael

marvin78

#8
Ich habe dich oben gebeten, bitte Code-Tags zu verwenden. So kann das doch keiner richtig lesen.

Der Code von RomanticBoy kann nicht funktionieren. Auf Funktionalität habe ich das hier nicht getestet (für den DEF Bereich des at):

+*08:01 {
  if (ReadingsVal("HR.Waschmaschine.SenPwr","state",0) > 5) {
    fhem("set HR.Waschmaschine.Sw,HR.WaschmaschineBetrieb on");
  }
  elsif (ReadingsVal("Photovoltaik","Power_average",0) > 1 && ReadingsVal("Hausverteilung","Power_average",0) < 8000) {
    fhem("set HR.Waschmaschine.Sw,HR.WaschmaschineBetrieb on");
  }
  fhem("define delay at +00:02:00 {if (ReadingsVal('HR.Waschmaschine.SenPwr','state',0) < 5){fhem('set HR.Waschmaschine.Sw off')}}");
}


Bitte beschäftige dich mit den Grundlagen. Solche Fehler solltest du selbst erkennen können. Auch mit den Grundlagen des Forums solltest du dich beschäftigen. Bitte kopiere nicht wieder einfach nur den Code, sondern versuche zu verstehen, was da passiert. Lerne ein paar Perl Grundlagen, sonst bist du spätestens morgen wieder hier. Mein Hinweis oben bezog sich genau darauf. Ich habe dir deshalb nicht sofort einen fertigen Code gegeben, weil ich wollte, dass du dich mit deinem Code beschäftigst! Schau dir an, was der Unterschied zu deinem Code ist (bspw. die Klammern und Anführungszeichen) und überlege dir, warum das so wohl besser ist. Und schlage die entsprechenden Stellen om der commandref nach, bemühe google zu Perl. Das Anfänger PDF hast du offenbar auch nicht gelesen. Hole das nach.

mikerl67

Hallo marvin78,

Danke für die Antwort auch wenn die Ohrfeige echt geklatscht hat ;) ich habe das Anfänger PDF in dem Bereich gelesen, die Cammandref und verschieden Google Beiträge / Beispiele und das ganze seit ca zwei Wochen. Aber sorry, ich habe den Fehler nicht gesehen. Aber trotzdem Danke für deine Hilfe Gruß Michael