Mitsubishi Heavy mit integrietem WLan decode Hilfe gesucht

Begonnen von ch.eick, 15 Mai 2025, 18:38:00

Vorheriges Thema - Nächstes Thema

ch.eick

Hallo zusammen,
ich suche jemanden zur Unterstützung, um aus Python JavaScript Code mit Bit Operationen zu Perl zu convertieren.

Hier ist der Thread zur Kommunikation mit HTTPMOD mit der Klimaanlage.
https://forum.fhem.de/index.php?msg=1341474
Achtung, die Mitsubishi Heavy und Mitsubishi Electric sind unterschiedliche Firmen mit anderer Kommunikation.

Es gibt Code, der in Home Assistant bereits läuft, jedoch komme ich mit den Bitfieseleien nicht klar.

https://github.com/JobDoesburg/homebridge-mhi-wfrac/blob/main/src/device.ts

Das get und set mit der Klimaanlage funktioniert bereits und es kommt bereits ein solches reading zurück
contents_airconStat AACyn6r/AAAAAAARigAAAAAAAf////9tpIEEEAcqpAAAiAAAAQAAAAAAAAOAIKT/gBDB/5QQAADG9g==

Aus dem HA Code habe ich zum Test bereits eine Umwandlung mit base64 gemacht
Aus diesem hier
const statByte = Buffer.from(base64.replace('\n', ''), 'base64').toString('binary');Habe ich das gemacht
contents_airconStat_test:contents_airconStat.* { my $airconStat = encode_base64(ReadingsVal("$NAME","contents_airconStat","")) ; $airconStat =~ s/\n//g ; $airconStat }Und das steht dann drin
contents_airconStat_test QUFDeW42ci9BQUFBQUFBUmlnQUFBQUFBQWYvLy8vOXRwSUVFRUFjcXBBQUFpQUFBQVFBQUFBQUFBQU9BSUtUL2dCREIvNVFRQUFERzlnPT0=
In diesem String sind nun alle Informationen zu Temperatur, OPERATION_MODES, AIRFLOW, HORIZONTAL_POSITIONS, VERTICAL_POSITIONS usw enthalten. Es geht also darum das in verarbeitbare readings zu zerlegen und später auch wieder den Weg zurück zum String zu vollziehen.

Den HTTPMOD Teil bekomme ich selber hin, es geht mir rein nur um die Decodierung, um daraus die readings zu setzen.
Hier mal ein Mapping der Nummern in den Text für den Operations Mode  (Aus dem HA Code)
OPERATION_MODES: {
    0: 'auto';
    1: 'cool';
    2: 'heat';
    3: 'fan';
    4: 'dry';
  };

Über Hilfe würde ich mich sehr freuen. Eventuell würde ich auch mit dem Prinzip als Beispiel weiter kommen :-)

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Hier ein weiterer Test
{
my $contents_airconStat_test = "QUFDeW42ci9BQUFBQUFBUmlnQUFBQUFBQWYvLy8vOXRwSUVFRUFjcXBBQUFpQUFBQVFBQUFBQUFBQU9BSUtUL2dCREIvNVFRQUFERzlnPT0=" ;;
my @contents_airconStat_out = () ;;

    for(my $i=0;; $i<length($contents_airconStat_test);; $i++) {
        my $h = ord(substr($contents_airconStat_test,$i,1) );;
      if ($h > 127) {
        push(@contents_airconStat_out, (-1 * (256-$h)) ) ;;
      } else {
        push(@contents_airconStat_out, ($h) ) ;;
      }
    } ;;
 print "Updated Array: @contents_airconStat_out \n" ;;
}
Im Log bekomme ich dann
Updated Array: 81 85 70 68 101 87 52 50 99 105 57 66 81 85 70 66 81 85 70 66 85 109 108 110 81 85 70 66 81 85 70 66 81 87 89 118 76 121 56 118 79 88 82 119 83 85 86 70 82 85 70 106 99 88 66 66 81 85 70 112 81 85 70 66 81 86 70 66 81 85 70 66 81 85 70 66 81 85 57 66 83 85 116 85 76 50 100 67 82 69 73 118 78 86 70 82 81 85 70 69 82 122 108 110 80 84 48 61
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

#2
Moin zusammen,
ich habe mal den Vorstoß gewagt und meinen stillen neuen Bekannten CharGBT um Hilfe gefragt. Wenn er nett bleibt könnte das was werden :-) :-)

Aus der Quelle vom Home Assistant und der Bitte um Übersetzung in Perl ist nach Nachbearbitung und Validierung nun die anhängende 99_Klima.pm geworden. Wie ernst dieser Versuch sein kann wird sich noch herausstellen. Ich betrachte es als meine Grundlage für einen ersten Versuch und für Ideen einer Umsetzung. Ich bin kein Programmierer und immer sehr bemüht mich weiterzuentwickeln.

Bei einem "reload 99_Klima.pm" bekomme ich natürlich wie erwartet Fehlermeldungen, die ich bereits in vielen Fällen selber beheben konnte.

Zu Beginn werden Arrays mit Konstanten definiert, auf die später in einer Funktion mit einem Hash zugegriffen wird. Das mit dem Hash entzieht sich meinem Kenntnisstand und somit würde ich mich freuen, wenn mir jemand da weiter helfen könnte.

< snip >
my @outdoorTempList = (-50.0, -50.0, < snip >) ;      # eingekürzt!
< snip >


# Hauptfunktion
sub fromBase64 {
##    my ($base64_str) = @_;
    my ($base64_str) = "AACyn6r/AAAAAAARigAAAAAAAf////9tpIEEEAcqpAAAiAAAAQAAAAAAAAOAIKT/gBDB/5QQAADG9g==";

    my $deviceStatus = DeviceStatus->new();

< snip >


    $deviceStatus->{electric} = 0;

    for (my $i = 0; $i < @vals; $i += 4) {
        # Outdoor Temp
        if ($vals[$i] == -128 && $vals[$i + 1] == 16) {
            my $index = $vals[$i + 2] & 0xFF;
            $deviceStatus->{outdoorTemp} = $outdoorTempList->[$index];     # Das verstehe ich noch nicht,
                                                                           # es passt jedoch die Variablen deklartion nicht
        }
        # Indoor Temp
        if ($vals[$i] == -128 && $vals[$i + 1] == 32) {
            my $index = $vals[$i + 2] & 0xFF;
            $deviceStatus->{indoorTemp} = $indoorTempList->[$index];
        }
        # Electric
        if ($vals[$i] == -108 && $vals[$i + 1] == 16) {
            my @bytes = ($vals[$i + 2], $vals[$i + 3], 0, 0);
            # Pack die Bytes in eine 32-bit Zahl
            my $uint = unpack('L', pack('C4', @bytes));
            $deviceStatus->{electric} = $uint * 0.25;
        }
    }

    return $deviceStatus;
}
Hier die Fehlermeldung
# Die Zeilennummern passen mit der original Datei

Global symbol "$outdoorTempList" requires explicit package name (did you forget to declare "my $outdoorTempList"?) at ./FHEM/99_Klima.pm line 178.
Global symbol "$indoorTempList" requires explicit package name (did you forget to declare "my $indoorTempList"?) at ./FHEM/99_Klima.pm line 183.

Wie kann ich die Deklaration in der Funktion bekannt machen?

Danke für Eure Hilfe
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Prof. Dr. Peter Henning

Ich schlage dringend vor, das Modul umzubenennen. Denn es soll ja nicht _alle_ Klimaanlagen bedienen. Für meine Daikin-Anlagen gibt es beispielsweise 58_DaikinCloud.pm.

LG

pah

ch.eick

#4
Zitat von: Prof. Dr. Peter Henning am 23 Mai 2025, 09:50:14Ich schlage dringend vor, das Modul umzubenennen. Denn es soll ja nicht _alle_ Klimaanlagen bedienen. Für meine Daikin-Anlagen gibt es beispielsweise 58_DaikinCloud.pm.
Moin pah,
das ist selbstverständlich, es war ein Schnellschuss um die Perl Funktionen nicht direkt in die 99_myUtils.pm zu schreiben :-)
Die Datei habe ich im ersten Post jetzt geändert.
Da ich kein Entwickler bin werde ich wohl auch kein Modul mit dem Support für FHEM schreiben können.
An meiner Fragestellung erkennt man ja schnell meine Perl Kenntnisse. Mit dem Array und hash bin ich leider noch nicht weiter.
Ich sehe meine Tätigkeit auch eher als Zuarbeit für jemanden, der Module schreiben kann.

Vielen Dank
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Prof. Dr. Peter Henning

#5
Hier mal ein ganz kurzer Text zu hashes: https://www.mathe2.uni-bayreuth.de/perl/GK/hashes.htm

Ansonsten: Ich habe gerade einen Artikel darüber geschrieben, das schon mittelfristig "einfache" Programmierung durch KI erledigt werden wird. Allerdings solltest Du dabei nicht auf ein allgemeines LLM wie chatGPT setzen, sondern spezialisierte Werkzeuge verwenden. Die sind für den privaten Gebrauch auch kostenlos, beispielsweise https://zencoder.ai oder https://openai.com/index/openai-codex

Und noch ein Tipp: Ich habe _diverse_ Hilfsprogramme in Perl-Modulen, die heißen immer 99_<ZWECK>Utils.pm, in Deinem Falle würde ich für Deinen privaten Code vorschlagen (natürlich) 99_KlimaUtils.pm


LG

pah

ch.eick

Zitat von: Prof. Dr. Peter Henning am 23 Mai 2025, 11:32:19Hier mal ein ganz kurzer Text zu hashes: https://www.mathe2.uni-bayreuth.de/perl/GK/hashes.htm

Ansonsten: Ich habe gerade einen Artikel darüber geschrieben, das schon mittelfristig "einfache" Programmierung durch KI erledigt werden wird. Allerdings solltest Du dabei nicht auf ein allgemeines LLM wie chatGPT setzen, sondern spezialisierte Werkzeuge verwenden. Die sind für den privaten Gebrauch auch kostenlos, beispielsweise https://zencoder.ai oder https://openai.com/index/openai-codex

Und noch ein Tipp: Ich habe _diverse_ Hilfsprogramme in Perl-Modulen, die heißen immer 99_<ZWECK>Utils.pm, in Deinem Falle würde ich für Deinen privaten Code vorschlagen (natürlich) 99_KlimaUtils.pm
Danke für die Hilfe.

Ich habe es auf 99_Mitsubishi_Heavy.pm umbenannt, da es ja keine Klima Tools sind sondern dem Anschluss der Klimaanlage dienen soll.
Das mit chatGBT war mein erster Test JavaScript in Perl übersetzen zu lassen. Das sieht bisher auch recht gut aus, übersteigt jedoch meinen Lernstand.
Ich denke der nächste Schritt wird sein, ein einfaches Muster mit Array und Hash zu erstellen, andem ich das lernen kann.
Die chatGBT Umsetzung konnte ja immer nur Stücke des Codes verarbeiten und somit passt nicht alles 100%ig zusammen.

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Guybrush

gibt es denn keine Dokumentation zur Schnittstelle? Deine Beispiele sind leider nicht nachvollziehbar. Grundsätzlich mögen Sprachmodelle wie chatGPT ja hilfreich sein. Allerdings mehr als Inspiration taugt das nicht aus meiner Sicht. Letztlich ist das keine echte KI wie man denken könnte. alle paar Jahre gibts neue Hypes. Von Industrie 4.0 spricht auch kaum noch einer :-) Da kommt jedenfalls zu oft komisches Zeug raus und ohne Programmierkenntnisse wird das dann oft nix. Fang doch mit kleineren Sachen an. Dabei lernt man dann ganz automatisch perl. ansonsten brauchst du eine doku wenn dir jemand helfen soll...

ch.eick

Zitat von: Guybrush am 23 Mai 2025, 15:22:51gibt es denn keine Dokumentation zur Schnittstelle? Deine Beispiele sind leider nicht nachvollziehbar. Grundsätzlich mögen Sprachmodelle wie chatGPT ja hilfreich sein. Allerdings mehr als Inspiration taugt das nicht aus meiner Sicht. Letztlich ist das keine echte KI wie man denken könnte. alle paar Jahre gibts neue Hypes. Von Industrie 4.0 spricht auch kaum noch einer :-) Da kommt jedenfalls zu oft komisches Zeug raus und ohne Programmierkenntnisse wird das dann oft nix. Fang doch mit kleineren Sachen an. Dabei lernt man dann ganz automatisch perl. ansonsten brauchst du eine doku wenn dir jemand helfen soll...

Ich habe leider nur das JavaScript Beispiel von Home Assistant und das mit chatGBT wäre die erste Hilfe :-)

Für die Dekodierung der rückgemeldeten Daten habe ich nirgens eine Beschreibung gefunden. Somit habe ich nur die funktionierende Umsetzung in JavaScript.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Prof. Dr. Peter Henning

Zitat von: Guybrush am 23 Mai 2025, 15:22:51Allerdings mehr als Inspiration taugt das nicht aus meiner Sicht. Letztlich ist das keine echte KI wie man denken könnte.
Pardon, aber das ist Unsinn.

Erstens ist es sehr wohl eine "echte" schwache KI - eben ein LLM, basierend auf einem neuronalen Netz. Dass es (noch) keine "echte" starke KI gibt, ist wohl trivial.

Zweitens habe ich doch gerade vorher ausgeführt, dass die auf Programmierung trainierten (!) und somit spezialiserten (!) neuronalen Netze sehr wohl inzwischen einigermaßen professionellen Code liefern. Das größte Problem ist derzeit noch Slopsquatting: LLM halluzinieren nicht existierende Paketnamen, die zur Einschleusung von Schadcode verwendet werden. Betrifft derzeit ca. 20% der KI-generierten Code Snippets.

LG

pah