Neues Modul für Brilix/Alsavo Pool-Wärmepumpe

Begonnen von Init, 02 Juni 2023, 19:18:54

Vorheriges Thema - Nächstes Thema

Beta-User

Zitat von: Init am 01 September 2024, 13:50:10Im Anhang ein Screenshot von meinen Optionen unter dem ersten Post (Chrome und Edge). Habe nun den Moderator angeschrieben.
Das ist immer unten-unten, nur bei mir halt (umgekehrte Sortierung der Beiträge) unter dem ERSTEN Beitrag (sorry), bei dir unter dem LETZTEN...

Das mit den vermeintlichen Zahlen in
    Alsavo_Log($hash, 3, "#1 Cmd: $cmd - Args: ".join( " ", @args));
hat vermutlich damit zu tun, dass (im on/off-Fall) nur "$cmd" überhaupt einen Inhalt hat, und der Rest irgendwelche Reste sind, die halt im Speicher sind. Das kommt davon (nicht personlich gemeint!), wenn man Prototypes propagiert, aber nicht im Detail erklärt, für was die gut sind. Daher arbeite ich in der Regel (PBP-konform und) ohne Prototypes... (Diskussion dazu siehe den bereits verlinkten Thread in "Perl für ...").
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Init

Zitat von: Beta-User am 01 September 2024, 14:06:09
Zitat von: Init am 01 September 2024, 13:50:10Im Anhang ein Screenshot von meinen Optionen unter dem ersten Post (Chrome und Edge). Habe nun den Moderator angeschrieben.
Das ist immer unten-unten, nur bei mir halt (umgekehrte Sortierung der Beiträge) unter dem ERSTEN Beitrag (sorry), bei dir unter dem LETZTEN...
Jetzt habe ich den Button gefunden und habe den Thread verschoben.

Ich habe nun alle Funktionen umbenannt, erhalte aber weiterhin in Zeile 282 bzw. 283 Zahlenwerte.

Ich versuche es mal mit Bildern zu erklären.

Ich klicke im folgenden Bild auf "set"
Du darfst diesen Dateianhang nicht ansehen.

Und erhalte folgenden Fehler:
Du darfst diesen Dateianhang nicht ansehen.

Mit folgender Ausgabe im Log:
2024.09.01 14:20:54.557 3: Alsavo Marc1 Device: schneckenBrilix - Line: 283 - Function: Set - Message: #1 Cmd: Timer - Args: 31

Die select Box enthält die richtigen Werte:
<select class="select_widget" informid="schneckenBrilix-Timer" title="Timer"><option value="on">on</option><option value="off">off</option></select>

Die Fehlermeldung stammt aus Zeile 309 des Skripts, da $mode in 296/302 weder on noch off ist.

Das aktuelle Skript ist nochmal im Anhang.

Wie gesagt, es ist einfach komisch, dass es mal nach einem "reload 23_Alsavo" funktioniert und dann nicht mehr.
Auch ein Neustart von FHEM oder eine Neuerstellung vom Device helfen.

Beta-User

Hmmm, strange...

Wie schaut es aus, wenn du den Befehl im Klartext in das Kommandofeld eingibts, also nicht "klickibunti" vorgehst?

Kleine Anmerkungen zu Code im Anhang.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Init

#18
Sehr interessant.

set schneckenBrilix Timer off
set schneckenBrilix Timer on
Funktioniert beides.

Anbei nochmal die aktuelle Version, da habe ich das set für on und off kompetiert.

Es riecht für mich danach, das manchmal in @args die Werte aus Zeile 234 - 244 steht.
Aber warum. Das verstehe ich nicht. Wahrscheinlich ist meine Herangehensweise für das Schreiben der aktuellen Werte für die Set-Select-Box falsch.

Um dies zu verifizieren, habe ich die Zeile 252 ersetzt.
Von "return $name . "|" . $myReturn;" auf "return;"

Jetzt werden keine Readings geschrieben. Danach habe ich alle Redings mit "deletereading schneckenBrilix .*" gelöscht.

Nun erhalte ich immer eine 6 in @args

Beta-User

#19
Hmmm, hatte das in grauer Vorzeit auch mal, dass irgendein Modulcode Probleme im Web-Frontend machte. (Sorry, weiß aber auch nicht mehr, was das Problem war und wie es zu lösen gewesen ist).

Aber was genau macht eigentlich "DoCommunication"? Da wird ja nur irgendein String zusammengebaut und zurückgegeben, oder verstehe ich da was falsch?

Anbei wieder eine kleine Überarbeitung, jetzt ist wenigstens der Prototype in setFn "korrekt"... (sicherheitshalber FHEM neu starten, wenn Prototypes geändert werden)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

Jedenfalls kommt es mir extremst komisch vor, wie da in DoCommunication mit $hash gearbeitet wird. Funktioniert das wirklich?!?

Tendenziell würde ich statt später auszuführendem Code was serialisiertes zurückgeben (wenn man nicht den urspünglichen JSON haben will?!?), das durch "parseParams" leicht wieder in einen HASH zurückzuführen wäre (TemperaturHeating=54 state=on) und dann in der DoCommunicationDone erst ausgepackt wird...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Init

Danke für die Anpassung!

Alsavo_DoCommunication ruft AlsavoCtrl mit den notwendigen Parametern auf und bereitet folgenden String auf, um den 2. Teil (Trenner ist |) in Alsavo_DoCommunicationDone mittel eval ausführen zu lassen:

{Alsavo_DoCommunicationDone('schneckenBrilix|readingsBeginUpdate($hash)
readingsBulkUpdate($hash, "TemperaturHeating","32")
readingsBulkUpdate($hash, "config_1_Heating_mode_target_temp", "320")
readingsBulkUpdate($hash, "TemperaturCooling","20")
readingsBulkUpdate($hash, "config_2_Cooling_mode_target_temp", "200")
readingsBulkUpdate($hash, "TemperaturAutoMode","30")
readingsBulkUpdate($hash, "config_3_Auto_mode_target_temp", "300")
readingsBulkUpdate($hash, "state","on")
readingsBulkUpdate($hash, "Timer","off")
readingsBulkUpdate($hash, "config_4_System_config_bitmask_1", "32")
readingsBulkUpdate($hash, "config_5_System_config_bitmask_2", "0")
readingsBulkUpdate($hash, "config_6_Manual_frequency_setting", "50")
readingsBulkUpdate($hash, "config_7_Manual_EEV_setting", "350")
readingsBulkUpdate($hash, "config_8_Manual_fan_speed_setting", "500")
readingsBulkUpdate($hash, "config_9_Defrost_in_temp", "-70")
readingsBulkUpdate($hash, "config_10_Defrost_out_temp", "200")
readingsBulkUpdate($hash, "config_11_Water_temperature_calibration", "0")
readingsBulkUpdate($hash, "config_12_Defrost_in_time", "40")
readingsBulkUpdate($hash, "config_13_Defrost_out_time", "12")
readingsBulkUpdate($hash, "config_14_Hot_over", "30")
readingsBulkUpdate($hash, "config_15_Cold_over_default_-20", "-20")
readingsBulkUpdate($hash, "PowerMode","Powerful")
readingsBulkUpdate($hash, "config_16_Power_mode", "2")
readingsBulkUpdate($hash, "config_17_Unknown,_default_value_6", "6")
readingsBulkUpdate($hash, "config_32_Current_time,_hibyte=hours,_lobyte=minutes", "5432")
readingsBulkUpdate($hash, "TimerOnTime","09:30")
readingsBulkUpdate($hash, "config_33_Timer_on_time", "2334")
readingsBulkUpdate($hash, "TimerOffTime","17:45")
readingsBulkUpdate($hash, "config_34_Timer_off_time", "4397")
readingsBulkUpdate($hash, "status_16_Water_in_temp", "27.5")
readingsBulkUpdate($hash, "status_17_Water_out_temp", "35")
readingsBulkUpdate($hash, "status_18_Ambient_temperature", "28.7")
readingsBulkUpdate($hash, "status_19_Cold_pipe_temperature", "7.4")
readingsBulkUpdate($hash, "status_20_Heating_pipe_temperature", "14.1")
readingsBulkUpdate($hash, "status_21_IPM_module_temperature", "47")
readingsBulkUpdate($hash, "status_22_Fan_speed_(RPM)", "855")
readingsBulkUpdate($hash, "status_23_Exhaust_temperature", "74.8")
readingsBulkUpdate($hash, "status_24_Compressor_input_temperature", "0")
readingsBulkUpdate($hash, "status_25_Electronic_exhaust_valve_opening_setting,_Range:_0-450\'ish", "334")
readingsBulkUpdate($hash, "status_26_Compressor_current_in_amps", "11")
readingsBulkUpdate($hash, "status_27_Compressor_running_frequency", "99")
readingsBulkUpdate($hash, "status_33_Compressor_speed_setting_(0_=_off,_1_=_P1_40Hz,_5_=_P5_82Hz)", "4")
readingsBulkUpdate($hash, "status_34_Frequency_limit_code", "0")
readingsBulkUpdate($hash, "status_48_Alarm_code_1", "0")
readingsBulkUpdate($hash, "status_49_Alarm_code_2", "0")
readingsBulkUpdate($hash, "status_50_Alarm_code_3", "0")
readingsBulkUpdate($hash, "status_51_Alarm_code_4", "0")
readingsBulkUpdate($hash, "status_52_System_status_code", "0")
readingsBulkUpdate($hash, "status_53_System_running_code", "3")
readingsBulkUpdate($hash, "status_54_Device_status_code", "47")
readingsBulkUpdate($hash, "status_55_Heating_max_temperature", "41")
readingsBulkUpdate($hash, "status_56_Cooling_min_temperature", "6")
readingsBulkUpdate($hash, "status_64_Device_type", "0")
readingsBulkUpdate($hash, "status_65_Main_board_HW_revision", "8306")
readingsBulkUpdate($hash, "status_66_Main_board_SW_revision", "16")
readingsBulkUpdate($hash, "status_67_Manual_HW_code", "8306")
readingsBulkUpdate($hash, "status_68_Manual_SW_code", "16")
readingsBulkUpdate($hash, "TemperaturHeating","32")
readingsBulkUpdate($hash, "config_1_Heating_mode_target_temp", "320")
readingsBulkUpdate($hash, "TemperaturCooling","20")
readingsBulkUpdate($hash, "config_2_Cooling_mode_target_temp", "200")
readingsBulkUpdate($hash, "TemperaturAutoMode","30")
readingsBulkUpdate($hash, "config_3_Auto_mode_target_temp", "300")
readingsBulkUpdate($hash, "state","on")
readingsBulkUpdate($hash, "Timer","off")
readingsBulkUpdate($hash, "config_4_System_config_bitmask_1", "32")
readingsBulkUpdate($hash, "config_5_System_config_bitmask_2", "0")
readingsBulkUpdate($hash, "config_6_Manual_frequency_setting", "50")
readingsBulkUpdate($hash, "config_7_Manual_EEV_setting", "350")
readingsBulkUpdate($hash, "config_8_Manual_fan_speed_setting", "500")
readingsBulkUpdate($hash, "config_9_Defrost_in_temp", "-70")
readingsBulkUpdate($hash, "config_10_Defrost_out_temp", "200")
readingsBulkUpdate($hash, "config_11_Water_temperature_calibration", "0")
readingsBulkUpdate($hash, "config_12_Defrost_in_time", "40")
readingsBulkUpdate($hash, "config_13_Defrost_out_time", "12")
readingsBulkUpdate($hash, "config_14_Hot_over", "30")
readingsBulkUpdate($hash, "config_15_Cold_over_default_-20", "-20")
readingsBulkUpdate($hash, "PowerMode","Powerful")
readingsBulkUpdate($hash, "config_16_Power_mode", "2")
readingsBulkUpdate($hash, "config_17_Unknown,_default_value_6", "6")
readingsBulkUpdate($hash, "config_32_Current_time,_hibyte=hours,_lobyte=minutes", "5432")
readingsBulkUpdate($hash, "TimerOnTime","09:30")
readingsBulkUpdate($hash, "config_33_Timer_on_time", "2334")
readingsBulkUpdate($hash, "TimerOffTime","17:45")
readingsBulkUpdate($hash, "config_34_Timer_off_time", "4397")
readingsEndUpdate($hash, 1)
 ')}

Siehst du hier etwas falsches?

Beta-User

Zitat von: Init am 01 September 2024, 16:42:31Siehst du hier etwas falsches?
Das mit dem "$hash" gefällt mir ebensowenig wie "eval" (is evil)...

Warum gibts du nicht was parseParams-taugliches zurück, Muster in etwa so:
{Alsavo_DoCommunicationDone('schneckenBrilix|TemperaturHeating=32 config_1_Heating_mode_target_temp=320 TemperaturCooling=....')}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

Und warum machst du das nicht so, dass du statt
return $name . "|" . $myReturn;
nicht einfach
return "$name|${output}";
aus DoCommunication zurückgibst und den ganzen Rest in "Done" machst?!?

PS:
        my $json = from_json($jsonraw);
Alle JSON-Decodierungsversuche sind hochgradig "gefährlich" für den Fall, dass nicht wie erwartet effektiv ein JSON-Blob zurückgegeben wird. Das sollte man unbedingt "einpacken", siehe https://forum.fhem.de/index.php?msg=1227235
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Init

Zitat von: Beta-User am 01 September 2024, 16:54:03Warum gibts du nicht was parseParams-taugliches zurück, Muster in etwa so:
{Alsavo_DoCommunicationDone('schneckenBrilix|TemperaturHeating=32 config_1_Heating_mode_target_temp=320 TemperaturCooling=....')}
Wenn ich es richtig gemacht habe, dann sollte alles in "DoCommunication" nicht FHEM blockieren und daher wollte ich dort alle "zeitraubenden" Schleifen implementieren und im Alsavo_DoCommunicationDone alles einfach ausführen lassen.

Zitat von: Beta-User am 01 September 2024, 17:19:44        my $json = from_json($jsonraw);
Alle JSON-Decodierungsversuche sind hochgradig "gefährlich" für den Fall, dass nicht wie erwartet effektiv ein JSON-Blob zurückgegeben wird. Das sollte man unbedingt "einpacken", siehe https://forum.fhem.de/index.php?msg=1227235
Der Response von ./AlsavoCtrl sieht wie folgt aus:
/home/alsavo/status/16={"type":"status", "index":16, "value":26.0}
/home/alsavo/status/17={"type":"status", "index":17, "value":28.5}
/home/alsavo/status/18={"type":"status", "index":18, "value":21.3}
/home/alsavo/status/19={"type":"status", "index":19, "value":0.0}
/home/alsavo/status/20={"type":"status", "index":20, "value":20.4}
/home/alsavo/status/21={"type":"status", "index":21, "value":30.0}
/home/alsavo/status/22={"type":"status", "index":22, "value":0}
/home/alsavo/status/23={"type":"status", "index":23, "value":29.8}
/home/alsavo/status/24={"type":"status", "index":24, "value":0.0}
/home/alsavo/status/25={"type":"status", "index":25, "value":350}
/home/alsavo/status/26={"type":"status", "index":26, "value":0}
/home/alsavo/status/27={"type":"status", "index":27, "value":0}
/home/alsavo/status/33={"type":"status", "index":33, "value":8}
/home/alsavo/status/34={"type":"status", "index":34, "value":0}
/home/alsavo/status/48={"type":"status", "index":48, "value":0}
/home/alsavo/status/49={"type":"status", "index":49, "value":0}
/home/alsavo/status/50={"type":"status", "index":50, "value":0}
/home/alsavo/status/51={"type":"status", "index":51, "value":0}
/home/alsavo/status/52={"type":"status", "index":52, "value":0}
/home/alsavo/status/53={"type":"status", "index":53, "value":0}
/home/alsavo/status/54={"type":"status", "index":54, "value":0}
/home/alsavo/status/55={"type":"status", "index":55, "value":41.0}
/home/alsavo/status/56={"type":"status", "index":56, "value":6.0}
/home/alsavo/status/64={"type":"status", "index":64, "value":0}
/home/alsavo/status/65={"type":"status", "index":65, "value":8306}
/home/alsavo/status/66={"type":"status", "index":66, "value":16}
/home/alsavo/status/67={"type":"status", "index":67, "value":8306}
/home/alsavo/status/68={"type":"status", "index":68, "value":16}
/home/alsavo/config/1={"type":"config", "index":1, "value":320}
/home/alsavo/config/2={"type":"config", "index":2, "value":200}
/home/alsavo/config/3={"type":"config", "index":3, "value":300}
/home/alsavo/config/4={"type":"config", "index":4, "value":1}
/home/alsavo/config/5={"type":"config", "index":5, "value":0}
/home/alsavo/config/6={"type":"config", "index":6, "value":50}
/home/alsavo/config/7={"type":"config", "index":7, "value":350}
/home/alsavo/config/8={"type":"config", "index":8, "value":500}
/home/alsavo/config/9={"type":"config", "index":9, "value":-70}
/home/alsavo/config/10={"type":"config", "index":10, "value":200}
/home/alsavo/config/11={"type":"config", "index":11, "value":0}
/home/alsavo/config/12={"type":"config", "index":12, "value":40}
/home/alsavo/config/13={"type":"config", "index":13, "value":12}
/home/alsavo/config/14={"type":"config", "index":14, "value":30}
/home/alsavo/config/15={"type":"config", "index":15, "value":-20}
/home/alsavo/config/16={"type":"config", "index":16, "value":2}
/home/alsavo/config/17={"type":"config", "index":17, "value":6}
/home/alsavo/config/32={"type":"config", "index":32, "value":5433}
/home/alsavo/config/33={"type":"config", "index":33, "value":2334}
/home/alsavo/config/34={"type":"config", "index":34, "value":4397}
Ich habe extra nicht die JSON-Variante genommen.


Zitat von: Beta-User am 01 September 2024, 16:01:11Anbei wieder eine kleine Überarbeitung, jetzt ist wenigstens der Prototype in setFn "korrekt"... (sicherheitshalber FHEM neu starten, wenn Prototypes geändert werden)
Danke, habe ich übernommen, aber was macht folgendes genau?
Alsavo_Set($$$;@)

Hatte schon gehofft, dass die geänderten Parameter helfen, aber leider ist der Fehler noch vorhanden.

Ich habe das Modul mal so umgebaut, dass du die selben Readings zurückbekommst wie ich über AlsavoCtrl. Alle Aufrufe zu AlsavoCtrl sind deaktiviert.
Bekommst du bei dieser Version auch den Fehler, wenn du über die Weboberfläche set schneckenBrilix Timer off machst? Also wie in https://forum.fhem.de/index.php?msg=1319352 beschrieben. Aktuelle Version im Anhang

Viele Grüße und tausend Dank für deinen ganzen Input
Marc

Init

Es ist nicht zu verstehen. Heute habe ich die Readings gelöscht, dann das Device gelöscht, FHEM neu gestartet und das Device neu angelegt. Nun funktioniert es.
Danke für die Unterstützung