[gelöst] Fehler in meinem Perl Code

Begonnen von Der_müde_Joe, 14 Januar 2018, 20:15:23

Vorheriges Thema - Nächstes Thema

Der_müde_Joe

Hallo ihr lieben,

ich hatte bis letzten Winter folgenden Code erfolgreich laufen und nun wollte ich den wieder benutzen und er tut es nicht mehr. Ich vermute, dass sich durch ein FHEM Update etwas geändert hat, was dazu führt, dass er nicht mehr geht. Kann mir da jemand helfen?

Folgende Funktion soll der Code erfüllen:
Ein FHT80B misst die Raumtemperatur und gibt einen Wert für den Stellmotor der Heizung an FHEM. Den Wert Actuator. NUn soll, wenn der actuator Wert größer als 60% ist ein Steckdosenschalter einschalten und bei unterschreiten entsprechend ausschalten. Also ich steuer mit einem FHT80B3 einen Heizlüfter.


define AZ2_Thermostat_Logo notify AZ2_Thermostat { \
my $FHT = "$EVENT";; \
  if ($FHT =~ "actuator:") { \
    $FHT = (substr($FHT, 9, (length($FHT)-10)));; \
    if (($FHT > 60) && Value("AZ2_Heizungsschalter") eq "off") { \
      fhem("set AZ2_Heizungsschalter on") \
    } \
    else { \
    if (($FHT < 60) && Value("AZ2_Heizungsschalter") eq "on") { \
      fhem("set AZ2_Heizungsschalter off") \
    } \
    } \
  } \
}
attr AZ2_Thermostat_Logo room AZ2


Vielleicht sieht ja einer den Fehler.

Vielen Dank!
Joe

betateilchen


define AZ2_Thermostat_Logo notify AZ2_Thermostat:actuator.* {my $cmd = ReadingsNum('AZ2_Thermostat','actuator',0) > 60 ? 'on' : 'off'; fhem("set AZ2_Heizungsschalter $cmd")}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

KernSani

Sind die &amp; wirklich so im Code oder kommt das durch das kopieren ins Forum?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

betateilchen

die sind mit Sicherheit so im Code, weil das eine logische Verknüpfung ist. (die übrigens völlig überflüssig ist)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

KernSani

#4
Zitat von: betateilchen am 14 Januar 2018, 20:31:02
die sind mit Sicherheit so im Code, weil das eine logische Verknüpfung ist. (die übrigens völlig überflüssig ist)
Ich meinte ob da AMP drinsteht...

Edit: Vergessen wir das: In tapatalk steht da &amp; drin - im Web sieht's normal aus. Komisch, ist mir noch nie aufgefallen, dass tapatalk da Unfug macht...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

KernSani

#6
(https://uploads.tapatalk-cdn.com/20180114/0006488b00b7b04aec14437441175fa2.jpg)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

betateilchen

Das ist aber ein Darstellungsproblem in Deinem Webbrowser / Client.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

KernSani

Zitat von: betateilchen am 14 Januar 2018, 21:14:43
Das ist aber ein Darstellungsproblem in Deinem Webbrowser / Client.

Habe ich mittlerweile auch gemerkt und oben ja auch oben schon angemerkt. AMP-Diskussion beendet. Die Frage ist jetzt, ob der_müde_Joe mit der Lösung zufrieden ist, oder ob er verstehen möchte, warum sein Code nicht funktioniert. Ich seh's nicht und bräuchte dazu mehr Infos, z.B. wie das Event im EventLog aussieht...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

betateilchen

Zitat von: KernSani am 14 Januar 2018, 21:23:11
Ich seh's nicht und bräuchte dazu mehr Infos, z.B. wie das Event im EventLog aussieht...

Das würde Dir auch nix nützen, ausserdem ist der Event-Aufbau eines FHT80b bekannt.

Es gibt in dem Code mehrere Stellen, die Probleme machen können:


  • von vier möglichen Kombinationen werden nur zwei abgefragt
  • das substr() nur um das Prozentzeichen wegzubekommen, ist haarsträubend. Genau dafür gibt es ReadingsNum()
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

RomanticBoy83

Ich kann ersteinmal keinen Fehler finden. Aber hier noch Stichworte zum besser Lesen:
-elsif
-$evtpart[1]
Vermutlich liegt das Problem im falschen event - wurde ja auch schon von anderen vermutet.

Prof. Dr. Peter Henning

So etwas schreibt man aber auch nicht in eine FHEM-Konfigurationsdatei, sondern in eine echte Perl-Datei (z.B. 99_myUtils,pm). Das kann man wesentlich besser testen und
debuggen.

LG

pah

frank

ich hätte ja mal in fhem.log geschaut.
und in zeile 2 würde ich die doublequotes entfernen.
my $FHT = "$EVENT";; \
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

betateilchen

Zitat von: frank am 15 Januar 2018, 11:45:19
und in zeile 2 würde ich die doublequotes entfernen.

die tun aber nix zur Sache.

Zitat von: Prof. Dr. Peter Henning am 15 Januar 2018, 10:12:59
So etwas schreibt man aber auch nicht in eine FHEM-Konfigurationsdatei, sondern in eine echte Perl-Datei (z.B. 99_myUtils,pm). Das kann man wesentlich besser testen und debuggen.

Da hast Du zwar recht, aber diese sinnvolle Vorgehensweise werden wir in diesem Leben wohl nicht mehr in die FHEM Anwender reinbekommen...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Der_müde_Joe

Hallo,

vielen lieben Dank an die vielen Helfer für die genauso vielen Anregungen und Ideen.

Das man das nicht in die fhem.cfg schreibt weiß ich. Das ist ein Codebrocken, welchen ich mir irgendwann mal mühselig zusammen kopiert und umgebastelt habe. Und somit eine Altlast. Alle anderen Sachen dieses Umfangs stehen bei mir tatsächlich schon in der 99_myutils.pm. Deshalb bin ich auch sehr dankbar für die Lösung oben und dann ich nun diesen "Schandfleck" aus meiner fhem.cfg entfernen kann. Nun muss ich mir noch  mehr angewöhnen die fhem.cfg mit dem Web Interface zu bearbeiten und weniger mit einem Edit Files, dann bin ich stolz auf mich.

Ich habe die alternative Lösung eben in die fhem.cfg opieren wollen und bekomme nun aber ein

Unknown command fhem("set, try help.


Ich habe die Vermutung, dass da was mit den Klemmern nicht passt. Aber obwohl ich schon versucht habe die Klammern zu versetzen klappt das nicht so recht. Vielleicht könnt ihr mir nochmal helfen?