Hauptmenü

HTTPMOD - JUDO isoft Save

Begonnen von ch.eick, 09 November 2020, 09:28:04

Vorheriges Thema - Nächstes Thema

ch.eick

#30
Zitat von: Kohle77 am 12 August 2021, 15:22:52

Habe ein paar Antworten von Judo erhalten:
ZitatMomentan haben wir leider keine Schnittstelle für eine direkte, lokale Bedienung. Infos hierzu kann ich nicht bereitstellen.

KNX ist, wie vom Kunde bereits beschrieben, nur durch das Störmelderelais möglich.

Wir arbeiten daran, eine lokale Bedienung zu ermöglichen. Hierzu ist jedoch ein Hard- und Softwareupdate erforderlich.
Verstehe zwar nicht was die lokale Bedienung mit der API zu tun hat aber was soll man machen.
Auf der i-soft plus läuft lokal eine Rest-API, die bei der i-soft save nicht vorhanden ist.

Der letzte Satz vom Service ist der interessante:
Damit das bei der i-soft safe überhaupt möglich ist muss eine Baugruppe ausgetauscht werden auf der dann andere Firmware läuft.
Bei mir gab es auch zu Beginn einen Service Einsatz, da die Kommunikation zu JUDO mit der alten FW nicht ging. Dabei hat JUDO auch einige HW getauscht, weil der Service Techniker den FW upgrade nicht vor Ort machen konnte/wollte :-)
Ich mag mal bezweifeln, dass das für Bestandskunden kostenlos sein wird.

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

Moin, ich habe Infos von JUDO

zur Kommunikation hier abgelegt.

Gruß
   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

SebastianStorb

#32
Nachdem ich gelesen hatte, dass es in FHEM eine Möglichkeit zur Anbindung gibt hatte ich mich für den Kauf einer JuDo Anlage entschieden. Mir wurde vom Handwerksbetrieb (wegen des Chip-Mangels?) die JuDo iSoft SAFE+ empfohlen und ich musste auf das Connectivity Modul "nur" 3 Wochen warten. Das Modul wird (zur Zeit?) nicht automatisch ausgeliefert und muss über eine Internetseite bestellt werden. Das hatte nicht funktioniert, wodurch ich eine Woche verloren habe. Nach einem Anrufe wurde das Modul für mich bestellt und ich konnte es jetzt einbauen. (Mein Tipp: besser das Porto für die beiliegende Bestell-Postkarte ausgeben oder direkt anrufen)

Mit der hervorragenden Anleitung im Wiki und den hier geschriebenen Ergänzungen konnte ich die Anlage in FHEM integrieren.

Einerseits schaffe ich es nicht die SET Befehle umzusetzen (weil ich keine Ahnung von der Handhabung dieses Modules habe) und andererseits werden die Messergebnisse aus der Anlage in FHEM nicht korrekt dargestellt.

Meine 1. Frage: Wie sende ich set Befehle aus fhem in die Anlage?

Die folgenden Versuche funktionieren alle nicht:

attr JUDO_iSoft  set01Name  CloseValve
attr JUDO_iSoft  set01URL   https://%JUDO_ipaddress%:8124/?group=waterstop&command=valve&msgnumber=1&token=%token%&parameter=close
attr JUDO_iSoft  set02Name  OpenValve
attr JUDO_iSoft  set02URL   https://%JUDO_ipaddress%:8124/?group=waterstop&command=valve&msgnumber=1&token=%token%&parameter=open
attr JUDO_iSoft  set03Name  residual-hardness
attr JUDO_iSoft  set03URL   https://%JUDO_ipaddress%:8124/?group=settings&command=residual%20hardness&msgnumber=1&token=%token%&parameter=$val

##ging nicht##

attr JUDO_iSoft  set01Name  CloseValve
attr JUDO_iSoft  set01URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=valve&msgnumber=1&token=%token%&parameter=close
attr JUDO_iSoft  set02Name  OpenValve
attr JUDO_iSoft  set02URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=valve&msgnumber=1&token=%token%&parameter=open
attr JUDO_iSoft  set03Name  residual-hardness
attr JUDO_iSoft  set03URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=residual%20hardness&msgnumber=1&token=%token%&parameter=$val

##ging nicht##

attr JUDO_iSoft  set01Name  CloseValve
attr JUDO_iSoft  set01URL   https://%JUDO_ipaddress%/interface/?group=waterstop&command&command=valve&msgnumber=1&token=%token%&parameter=close
attr JUDO_iSoft  set02Name  OpenValve
attr JUDO_iSoft  set02URL   https://%JUDO_ipaddress%/interface/?group=waterstop&command&command=valve&msgnumber=1&token=%token%&parameter=open
attr JUDO_iSoft  set03Name  residual-hardness
attr JUDO_iSoft  set03URL   https://%JUDO_ipaddress%/interface/?group=waterstop&command&command=residual%20hardness&msgnumber=1&token=%token%&parameter=$val

##ging auch nicht##



Meine 2. Frage:
Wie kann ich die Daten aus dem httpbody richtig in FHEM darstellen (bzw. umrechnen lassen)
Beispiel:
saltRange
25611 Tage

Wird in der JuDo App so dargestellt:
Reichweite Salzvorrat 26 Wochen
Ich hatte erfolglos versucht umzurechen:
saltRange { hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 4, 2)). / 1000" Tage" }
bringt aber immer 1600 Tage als Ergebnis.

Hier sind alle Daten meines Moduls aufgelistet. Wahrscheinlich sind viele Einträge falsch oder überflüssig, was ich jedoch nicht beurteilen kann. Alles über Copy und Paste bzw. Try and Error zusammengeschrieben:

Internals:
   BUSY       0
   DEF        https://%JUDO_ipaddress%/?group=waterstop&command=valve&msgnumber=4&token=%token% 300
   FUUID      61fd5dda-f33f-ec85-82b9-86984c55d9fce48b
   FVERSION   98_HTTPMOD.pm:0.247080/2021-07-06
   Interval   300
   LastAuthTry 2022-02-05 13:23:42
   MainURL    https://%JUDO_ipaddress%/?group=waterstop&command=valve&msgnumber=4&token=%token%
   ModuleVersion 4.1.10 - 6.7.2021
   NAME       JUDO_iSoft
   NOTIFYDEV  global
   NR         807
   NTFY_ORDER 50-JUDO_iSoft
   STATE      online
   TYPE       HTTPMOD
   httpbody   {"data":[{"serialnumber":"XXXXXXXXXX","installation_date":"2022-02-03T20:08:36","status":"online","sv":"1.12","hv":"1.0","data":[{"da":"0x1","dt":"0x33","sv":"2.11i","hv":"5.10","data":{"1":{"data":"690B02","st":"OK","er":""},"2":{"data":"0A05","st":"OK","er":""},"3":{"data":"557E0300","st":"OK","er":""},"5":{"data":"37001600","st":"OK","er":""},"6":{"data":"61E15E4A","st":"OK","er":""},"7":{"data":"282000000000","st":"OK","er":""},"8":{"data":"D2160000","st":"OK","er":""},"9":{"data":"760F0000","st":"OK","er":""},"10":{"data":"00","st":"OK","er":""},"12":{"data":"00","st":"OK","er":""},"14":{"data":"37001600","st":"OK","er":""},"63":{"data":"24","st":"OK","er":""},"90":{"data":"1300","st":"OK","er":""},"92":{"data":"0000","st":"OK","er":""},"93":{"data":"02010B64B10800000F","st":"OK","er":""},"94":{"data":"2DB4B800","st":"OK","er":""},"790":{"data":"0:00630F380000100006131300B4026F0000000000000055017F06160238006500","st":"OK","er":""},"791":{"data":"1:C0000000003A350F211ECD00ED00000071004C00000000000000910C10001000","st":"OK","er":""},"792":{"data":"2:003C1E000000000048000000A00FF4011E004306A00FF4010004B7031E000080","st":"OK","er":""},"793":null,"794":null,"lu":"5\/2\/2022 - 13:23:10"}}],"errors":[],"waterscene_time":null,"waterscene_time_garden":null,"waterscene_time_heater":null,"waterscene_time_washing":null,"waterscene":"normal","disable_time":"","waterscene_normal":"6","hardness_shower":"4","hardness_watering":"10","hardness_heater":"1","hardness_washing":"1","sleepmode_time":null,"holiday_mode":null,"update":"0"}],"status":"ok","token":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","command":"get device data"}
   value     
   CompiledRegexes:
   HttpUtils:
     NAME       
     addr       https://www.myjudo.eu:443
     auth       0
     buf       
     code       200
     compress   1
     conn       
     data       
     displayurl https://www.myjudo.eu/interface/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=get%20device%20data
     header     Content-Type: application/json
Accept: */*
     host       www.myjudo.eu
     httpheader HTTP/1.1 200 OK
Date: Sat, 05 Feb 2022 12:23:42 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Access-Control-Allow-Origin: *
Content-Length: 1634
Connection: close
Content-Type: application/json; charset=utf-8
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    443
     hu_portSfx
     ignoreredirects 1
     loglevel   4
     path       /interface/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=get%20device%20data
     protocol   https
     redirects  0
     timeout    5
     url        https://www.myjudo.eu/interface/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=get%20device%20data
     sslargs:
   QUEUE:
   READINGS:
     2022-02-05 13:23:43   DeviceData-1    0x1
     2022-02-05 13:23:43   DeviceData-10   OK
     2022-02-05 13:23:43   DeviceData-11   690B02
     2022-02-05 13:23:43   DeviceData-12   
     2022-02-05 13:23:43   DeviceData-13   OK
     2022-02-05 13:23:43   DeviceData-14   0A05
     2022-02-05 13:23:43   DeviceData-15   
     2022-02-05 13:23:43   DeviceData-16   OK
     2022-02-05 13:23:43   DeviceData-17   557E0300
     2022-02-05 13:23:43   DeviceData-18   
     2022-02-05 13:23:43   DeviceData-19   OK
     2022-02-05 13:23:43   DeviceData-2    00
     2022-02-05 13:23:43   DeviceData-20   37001600
     2022-02-05 13:23:43   DeviceData-21   
     2022-02-05 13:23:43   DeviceData-22   OK
     2022-02-05 13:23:43   DeviceData-23   24
     2022-02-05 13:23:43   DeviceData-24   
     2022-02-05 13:23:43   DeviceData-25   OK
     2022-02-05 13:23:43   DeviceData-26   61E15E4A
     2022-02-05 13:23:43   DeviceData-27   
     2022-02-05 13:23:43   DeviceData-28   OK
     2022-02-05 13:23:43   DeviceData-29   0:00630F380000100006131300B4026F0000000000000055017F06160238006500
     2022-02-05 13:23:43   DeviceData-3   
     2022-02-05 13:23:43   DeviceData-30   
     2022-02-05 13:23:43   DeviceData-31   OK
     2022-02-05 13:23:43   DeviceData-32   1:C0000000003A350F211ECD00ED00000071004C00000000000000910C10001000
     2022-02-05 13:23:43   DeviceData-33   
     2022-02-05 13:23:43   DeviceData-34   OK
     2022-02-05 13:23:43   DeviceData-35   2:003C1E000000000048000000A00FF4011E004306A00FF4010004B7031E000080
     2022-02-05 13:23:43   DeviceData-36   
     2022-02-05 13:23:43   DeviceData-37   OK
     2022-02-05 13:23:43   DeviceData-38   282000000000
     2022-02-05 13:23:43   DeviceData-39   
     2022-02-05 13:23:43   DeviceData-4    OK
     2022-02-05 13:23:43   DeviceData-40   OK
     2022-02-05 13:23:43   DeviceData-41   D2160000
     2022-02-05 13:23:43   DeviceData-42   
     2022-02-05 13:23:43   DeviceData-43   OK
     2022-02-05 13:23:43   DeviceData-44   1300
     2022-02-05 13:23:43   DeviceData-45   
     2022-02-05 13:23:43   DeviceData-46   OK
     2022-02-05 13:23:43   DeviceData-47   0000
     2022-02-05 13:23:43   DeviceData-48   
     2022-02-05 13:23:43   DeviceData-49   OK
     2022-02-05 13:23:43   DeviceData-5    00
     2022-02-05 13:23:43   DeviceData-50   02010B64B10800000F
     2022-02-05 13:23:43   DeviceData-51   
     2022-02-05 13:23:43   DeviceData-52   OK
     2022-02-05 13:23:43   DeviceData-53   2DB4B800
     2022-02-05 13:23:43   DeviceData-54   
     2022-02-05 13:23:43   DeviceData-55   OK
     2022-02-05 13:23:43   DeviceData-56   760F0000
     2022-02-05 13:23:43   DeviceData-57   
     2022-02-05 13:23:43   DeviceData-58   OK
     2022-02-05 13:23:43   DeviceData-59   5/2/2022 - 13:23:10
     2022-02-05 13:23:43   DeviceData-6   
     2022-02-05 13:23:43   DeviceData-60   0x33
     2022-02-05 13:23:43   DeviceData-61   5.10
     2022-02-05 13:23:43   DeviceData-62   2.11i
     2022-02-05 13:23:43   DeviceData-63   
     2022-02-05 13:23:43   DeviceData-64   1
     2022-02-05 13:23:43   DeviceData-65   4
     2022-02-05 13:23:43   DeviceData-66   1
     2022-02-05 13:23:43   DeviceData-67   10
     2022-02-05 13:23:43   DeviceData-68   1.0
     2022-02-05 13:23:43   DeviceData-69   2022-02-03T20:08:36
     2022-02-05 13:23:43   DeviceData-7    OK
     2022-02-05 13:23:43   DeviceData-70   XXXXXXXXXX
     2022-02-05 13:23:43   DeviceData-71   online
     2022-02-05 13:23:43   DeviceData-72   1.12
     2022-02-05 13:23:43   DeviceData-73   0
     2022-02-05 13:23:43   DeviceData-74   normal
     2022-02-05 13:23:43   DeviceData-75   6
     2022-02-05 13:23:43   DeviceData-8    37001600
     2022-02-05 13:23:43   DeviceData-9   
     2022-02-05 08:38:42   LAST_ERROR      read from https://www.myjudo.eu:443 timed out
     2022-02-05 13:23:43   command         get device data
     2022-02-05 13:23:43   data_01_data_01_da 0x1
     2022-02-05 13:23:43   data_01_data_01_data_10_data 00
     2022-02-05 13:23:43   data_01_data_01_data_10_er
     2022-02-05 13:23:43   data_01_data_01_data_10_st OK
     2022-02-05 13:23:43   data_01_data_01_data_12_data 00
     2022-02-05 13:23:43   data_01_data_01_data_12_er
     2022-02-05 13:23:43   data_01_data_01_data_12_st OK
     2022-02-05 13:23:43   data_01_data_01_data_14_data 37001600
     2022-02-05 13:23:43   data_01_data_01_data_14_er
     2022-02-05 13:23:43   data_01_data_01_data_14_st OK
     2022-02-05 13:23:43   data_01_data_01_data_1_data 690B02
     2022-02-05 13:23:43   data_01_data_01_data_1_er
     2022-02-05 13:23:43   data_01_data_01_data_1_st OK
     2022-02-05 13:23:43   data_01_data_01_data_2_data 0A05
     2022-02-05 13:23:43   data_01_data_01_data_2_er
     2022-02-05 13:23:43   data_01_data_01_data_2_st OK
     2022-02-05 13:23:43   data_01_data_01_data_3_data 557E0300
     2022-02-05 13:23:43   data_01_data_01_data_3_er
     2022-02-05 13:23:43   data_01_data_01_data_3_st OK
     2022-02-05 13:23:43   data_01_data_01_data_5_data 37001600
     2022-02-05 13:23:43   data_01_data_01_data_5_er
     2022-02-05 13:23:43   data_01_data_01_data_5_st OK
     2022-02-05 13:23:43   data_01_data_01_data_63_data 24
     2022-02-05 13:23:43   data_01_data_01_data_63_er
     2022-02-05 13:23:43   data_01_data_01_data_63_st OK
     2022-02-05 13:23:43   data_01_data_01_data_6_data 61E15E4A
     2022-02-05 13:23:43   data_01_data_01_data_6_er
     2022-02-05 13:23:43   data_01_data_01_data_6_st OK
     2022-02-05 13:23:43   data_01_data_01_data_790_data 0:00630F380000100006131300B4026F0000000000000055017F06160238006500
     2022-02-05 13:23:43   data_01_data_01_data_790_er
     2022-02-05 13:23:43   data_01_data_01_data_790_st OK
     2022-02-05 13:23:43   data_01_data_01_data_791_data 1:C0000000003A350F211ECD00ED00000071004C00000000000000910C10001000
     2022-02-05 13:23:43   data_01_data_01_data_791_er
     2022-02-05 13:23:43   data_01_data_01_data_791_st OK
     2022-02-05 13:23:43   data_01_data_01_data_792_data 2:003C1E000000000048000000A00FF4011E004306A00FF4010004B7031E000080
     2022-02-05 13:23:43   data_01_data_01_data_792_er
     2022-02-05 13:23:43   data_01_data_01_data_792_st OK
     2022-02-05 13:23:43   data_01_data_01_data_7_data 282000000000
     2022-02-05 13:23:43   data_01_data_01_data_7_er
     2022-02-05 13:23:43   data_01_data_01_data_7_st OK
     2022-02-05 13:23:43   data_01_data_01_data_8_data D2160000
     2022-02-05 13:23:43   data_01_data_01_data_8_er
     2022-02-05 13:23:43   data_01_data_01_data_8_st OK
     2022-02-05 13:23:43   data_01_data_01_data_90_data 1300
     2022-02-05 13:23:43   data_01_data_01_data_90_er
     2022-02-05 13:23:43   data_01_data_01_data_90_st OK
     2022-02-05 13:23:43   data_01_data_01_data_92_data 0000
     2022-02-05 13:23:43   data_01_data_01_data_92_er
     2022-02-05 13:23:43   data_01_data_01_data_92_st OK
     2022-02-05 13:23:43   data_01_data_01_data_93_data 02010B64B10800000F
     2022-02-05 13:23:43   data_01_data_01_data_93_er
     2022-02-05 13:23:43   data_01_data_01_data_93_st OK
     2022-02-05 13:23:43   data_01_data_01_data_94_data 2DB4B800
     2022-02-05 13:23:43   data_01_data_01_data_94_er
     2022-02-05 13:23:43   data_01_data_01_data_94_st OK
     2022-02-05 13:23:43   data_01_data_01_data_9_data 760F0000
     2022-02-05 13:23:43   data_01_data_01_data_9_er
     2022-02-05 13:23:43   data_01_data_01_data_9_st OK
     2022-02-05 13:23:43   data_01_data_01_data_lu 5/2/2022 - 13:23:10
     2022-02-05 13:23:43   data_01_data_01_dt 0x33
     2022-02-05 13:23:43   data_01_data_01_hv 5.10
     2022-02-05 13:23:43   data_01_data_01_sv 2.11i
     2022-02-05 13:23:43   data_01_disable_time
     2022-02-05 13:23:43   data_01_hardness_heater 1
     2022-02-05 13:23:43   data_01_hardness_shower 4
     2022-02-05 13:23:43   data_01_hardness_washing 1
     2022-02-05 13:23:43   data_01_hardness_watering 10
     2022-02-05 13:23:43   data_01_hv      1.0
     2022-02-05 13:23:43   data_01_installation_date 2022-02-03T20:08:36
     2022-02-05 13:23:43   data_01_serialnumber XXXXXXXXXX
     2022-02-05 13:23:43   data_01_status  online
     2022-02-05 13:23:43   data_01_sv      1.12
     2022-02-05 13:23:43   data_01_update  0
     2022-02-05 13:23:43   data_01_waterscene normal
     2022-02-05 13:23:43   data_01_waterscene_normal 6
     2022-02-05 13:23:42   notifications_email 0
     2022-02-05 13:23:42   notifications_push 0
     2022-02-05 13:23:42   notifications_sms 0
     2022-02-05 13:23:42   role            customer
     2022-02-05 13:23:43   saltLevel       301 g
     2022-02-05 13:23:43   saltRange       25611 Tage
     2022-02-05 13:23:42   servicenumber   
     2022-02-05 13:23:43   status          ok
     2022-02-05 13:23:43   token           XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     2022-02-05 13:23:43   waterProcessed  12104.749 m³
     2022-02-05 13:23:43   waterTotal      5.842 m³
   REQUEST:
     context    get
     data       
     header     Content-Type: application/json
Accept: */*
     ignoreredirects 0
     num        01
     priority   1
     retryCount 2
     type       get01
     url        https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
     value     
   defptr:
     readingBase:
       DeviceData-1 get
       DeviceData-10 get
       DeviceData-11 get
       DeviceData-12 get
       DeviceData-13 get
       DeviceData-14 get
       DeviceData-15 get
       DeviceData-16 get
       DeviceData-17 get
       DeviceData-18 get
       DeviceData-19 get
       DeviceData-2 get
       DeviceData-20 get
       DeviceData-21 get
       DeviceData-22 get
       DeviceData-23 get
       DeviceData-24 get
       DeviceData-25 get
       DeviceData-26 get
       DeviceData-27 get
       DeviceData-28 get
       DeviceData-29 get
       DeviceData-3 get
       DeviceData-30 get
       DeviceData-31 get
       DeviceData-32 get
       DeviceData-33 get
       DeviceData-34 get
       DeviceData-35 get
       DeviceData-36 get
       DeviceData-37 get
       DeviceData-38 get
       DeviceData-39 get
       DeviceData-4 get
       DeviceData-40 get
       DeviceData-41 get
       DeviceData-42 get
       DeviceData-43 get
       DeviceData-44 get
       DeviceData-45 get
       DeviceData-46 get
       DeviceData-47 get
       DeviceData-48 get
       DeviceData-49 get
       DeviceData-5 get
       DeviceData-50 get
       DeviceData-51 get
       DeviceData-52 get
       DeviceData-53 get
       DeviceData-54 get
       DeviceData-55 get
       DeviceData-56 get
       DeviceData-57 get
       DeviceData-58 get
       DeviceData-59 get
       DeviceData-6 get
       DeviceData-60 get
       DeviceData-61 get
       DeviceData-62 get
       DeviceData-63 get
       DeviceData-64 get
       DeviceData-65 get
       DeviceData-66 get
       DeviceData-67 get
       DeviceData-68 get
       DeviceData-69 get
       DeviceData-7 get
       DeviceData-70 get
       DeviceData-71 get
       DeviceData-72 get
       DeviceData-73 get
       DeviceData-74 get
       DeviceData-75 get
       DeviceData-8 get
       DeviceData-9 get
       command    get
       data_01_data_01_da get
       data_01_data_01_data_10_data get
       data_01_data_01_data_10_er get
       data_01_data_01_data_10_st get
       data_01_data_01_data_12_data get
       data_01_data_01_data_12_er get
       data_01_data_01_data_12_st get
       data_01_data_01_data_14_data get
       data_01_data_01_data_14_er get
       data_01_data_01_data_14_st get
       data_01_data_01_data_1_data get
       data_01_data_01_data_1_er get
       data_01_data_01_data_1_st get
       data_01_data_01_data_2_data get
       data_01_data_01_data_2_er get
       data_01_data_01_data_2_st get
       data_01_data_01_data_3_data get
       data_01_data_01_data_3_er get
       data_01_data_01_data_3_st get
       data_01_data_01_data_5_data get
       data_01_data_01_data_5_er get
       data_01_data_01_data_5_st get
       data_01_data_01_data_63_data get
       data_01_data_01_data_63_er get
       data_01_data_01_data_63_st get
       data_01_data_01_data_6_data get
       data_01_data_01_data_6_er get
       data_01_data_01_data_6_st get
       data_01_data_01_data_790_data get
       data_01_data_01_data_790_er get
       data_01_data_01_data_790_st get
       data_01_data_01_data_791_data get
       data_01_data_01_data_791_er get
       data_01_data_01_data_791_st get
       data_01_data_01_data_792_data get
       data_01_data_01_data_792_er get
       data_01_data_01_data_792_st get
       data_01_data_01_data_7_data get
       data_01_data_01_data_7_er get
       data_01_data_01_data_7_st get
       data_01_data_01_data_8_data get
       data_01_data_01_data_8_er get
       data_01_data_01_data_8_st get
       data_01_data_01_data_90_data get
       data_01_data_01_data_90_er get
       data_01_data_01_data_90_st get
       data_01_data_01_data_92_data get
       data_01_data_01_data_92_er get
       data_01_data_01_data_92_st get
       data_01_data_01_data_93_data get
       data_01_data_01_data_93_er get
       data_01_data_01_data_93_st get
       data_01_data_01_data_94_data get
       data_01_data_01_data_94_er get
       data_01_data_01_data_94_st get
       data_01_data_01_data_9_data get
       data_01_data_01_data_9_er get
       data_01_data_01_data_9_st get
       data_01_data_01_data_lu get
       data_01_data_01_dt get
       data_01_data_01_hv get
       data_01_data_01_sv get
       data_01_disable_time get
       data_01_hardness_heater get
       data_01_hardness_shower get
       data_01_hardness_washing get
       data_01_hardness_watering get
       data_01_hv get
       data_01_installation_date get
       data_01_serialnumber get
       data_01_status get
       data_01_sv get
       data_01_update get
       data_01_waterscene get
       data_01_waterscene_normal get
       notifications_email sid
       notifications_push sid
       notifications_sms sid
       role       sid
       servicenumber sid
       status     get
       token      get
     readingNum:
       DeviceData-1 01
       DeviceData-10 01
       DeviceData-11 01
       DeviceData-12 01
       DeviceData-13 01
       DeviceData-14 01
       DeviceData-15 01
       DeviceData-16 01
       DeviceData-17 01
       DeviceData-18 01
       DeviceData-19 01
       DeviceData-2 01
       DeviceData-20 01
       DeviceData-21 01
       DeviceData-22 01
       DeviceData-23 01
       DeviceData-24 01
       DeviceData-25 01
       DeviceData-26 01
       DeviceData-27 01
       DeviceData-28 01
       DeviceData-29 01
       DeviceData-3 01
       DeviceData-30 01
       DeviceData-31 01
       DeviceData-32 01
       DeviceData-33 01
       DeviceData-34 01
       DeviceData-35 01
       DeviceData-36 01
       DeviceData-37 01
       DeviceData-38 01
       DeviceData-39 01
       DeviceData-4 01
       DeviceData-40 01
       DeviceData-41 01
       DeviceData-42 01
       DeviceData-43 01
       DeviceData-44 01
       DeviceData-45 01
       DeviceData-46 01
       DeviceData-47 01
       DeviceData-48 01
       DeviceData-49 01
       DeviceData-5 01
       DeviceData-50 01
       DeviceData-51 01
       DeviceData-52 01
       DeviceData-53 01
       DeviceData-54 01
       DeviceData-55 01
       DeviceData-56 01
       DeviceData-57 01
       DeviceData-58 01
       DeviceData-59 01
       DeviceData-6 01
       DeviceData-60 01
       DeviceData-61 01
       DeviceData-62 01
       DeviceData-63 01
       DeviceData-64 01
       DeviceData-65 01
       DeviceData-66 01
       DeviceData-67 01
       DeviceData-68 01
       DeviceData-69 01
       DeviceData-7 01
       DeviceData-70 01
       DeviceData-71 01
       DeviceData-72 01
       DeviceData-73 01
       DeviceData-74 01
       DeviceData-75 01
       DeviceData-8 01
       DeviceData-9 01
       command    01
       data_01_data_01_da 01
       data_01_data_01_data_10_data 01
       data_01_data_01_data_10_er 01
       data_01_data_01_data_10_st 01
       data_01_data_01_data_12_data 01
       data_01_data_01_data_12_er 01
       data_01_data_01_data_12_st 01
       data_01_data_01_data_14_data 01
       data_01_data_01_data_14_er 01
       data_01_data_01_data_14_st 01
       data_01_data_01_data_1_data 01
       data_01_data_01_data_1_er 01
       data_01_data_01_data_1_st 01
       data_01_data_01_data_2_data 01
       data_01_data_01_data_2_er 01
       data_01_data_01_data_2_st 01
       data_01_data_01_data_3_data 01
       data_01_data_01_data_3_er 01
       data_01_data_01_data_3_st 01
       data_01_data_01_data_5_data 01
       data_01_data_01_data_5_er 01
       data_01_data_01_data_5_st 01
       data_01_data_01_data_63_data 01
       data_01_data_01_data_63_er 01
       data_01_data_01_data_63_st 01
       data_01_data_01_data_6_data 01
       data_01_data_01_data_6_er 01
       data_01_data_01_data_6_st 01
       data_01_data_01_data_790_data 01
       data_01_data_01_data_790_er 01
       data_01_data_01_data_790_st 01
       data_01_data_01_data_791_data 01
       data_01_data_01_data_791_er 01
       data_01_data_01_data_791_st 01
       data_01_data_01_data_792_data 01
       data_01_data_01_data_792_er 01
       data_01_data_01_data_792_st 01
       data_01_data_01_data_7_data 01
       data_01_data_01_data_7_er 01
       data_01_data_01_data_7_st 01
       data_01_data_01_data_8_data 01
       data_01_data_01_data_8_er 01
       data_01_data_01_data_8_st 01
       data_01_data_01_data_90_data 01
       data_01_data_01_data_90_er 01
       data_01_data_01_data_90_st 01
       data_01_data_01_data_92_data 01
       data_01_data_01_data_92_er 01
       data_01_data_01_data_92_st 01
       data_01_data_01_data_93_data 01
       data_01_data_01_data_93_er 01
       data_01_data_01_data_93_st 01
       data_01_data_01_data_94_data 01
       data_01_data_01_data_94_er 01
       data_01_data_01_data_94_st 01
       data_01_data_01_data_9_data 01
       data_01_data_01_data_9_er 01
       data_01_data_01_data_9_st 01
       data_01_data_01_data_lu 01
       data_01_data_01_dt 01
       data_01_data_01_hv 01
       data_01_data_01_sv 01
       data_01_disable_time 01
       data_01_hardness_heater 01
       data_01_hardness_shower 01
       data_01_hardness_washing 01
       data_01_hardness_watering 01
       data_01_hv 01
       data_01_installation_date 01
       data_01_serialnumber 01
       data_01_status 01
       data_01_sv 01
       data_01_update 01
       data_01_waterscene 01
       data_01_waterscene_normal 01
       notifications_email 01
       notifications_push 01
       notifications_sms 01
       role       01
       servicenumber 01
       status     01
       token      01
     readingOutdated:
     readingSubNum:
       DeviceData-1 -1
       DeviceData-10 -10
       DeviceData-11 -11
       DeviceData-12 -12
       DeviceData-13 -13
       DeviceData-14 -14
       DeviceData-15 -15
       DeviceData-16 -16
       DeviceData-17 -17
       DeviceData-18 -18
       DeviceData-19 -19
       DeviceData-2 -2
       DeviceData-20 -20
       DeviceData-21 -21
       DeviceData-22 -22
       DeviceData-23 -23
       DeviceData-24 -24
       DeviceData-25 -25
       DeviceData-26 -26
       DeviceData-27 -27
       DeviceData-28 -28
       DeviceData-29 -29
       DeviceData-3 -3
       DeviceData-30 -30
       DeviceData-31 -31
       DeviceData-32 -32
       DeviceData-33 -33
       DeviceData-34 -34
       DeviceData-35 -35
       DeviceData-36 -36
       DeviceData-37 -37
       DeviceData-38 -38
       DeviceData-39 -39
       DeviceData-4 -4
       DeviceData-40 -40
       DeviceData-41 -41
       DeviceData-42 -42
       DeviceData-43 -43
       DeviceData-44 -44
       DeviceData-45 -45
       DeviceData-46 -46
       DeviceData-47 -47
       DeviceData-48 -48
       DeviceData-49 -49
       DeviceData-5 -5
       DeviceData-50 -50
       DeviceData-51 -51
       DeviceData-52 -52
       DeviceData-53 -53
       DeviceData-54 -54
       DeviceData-55 -55
       DeviceData-56 -56
       DeviceData-57 -57
       DeviceData-58 -58
       DeviceData-59 -59
       DeviceData-6 -6
       DeviceData-60 -60
       DeviceData-61 -61
       DeviceData-62 -62
       DeviceData-63 -63
       DeviceData-64 -64
       DeviceData-65 -65
       DeviceData-66 -66
       DeviceData-67 -67
       DeviceData-68 -68
       DeviceData-69 -69
       DeviceData-7 -7
       DeviceData-70 -70
       DeviceData-71 -71
       DeviceData-72 -72
       DeviceData-73 -73
       DeviceData-74 -74
       DeviceData-75 -75
       DeviceData-8 -8
       DeviceData-9 -9
     requestReadings:
       auth01:
         notifications_email sid 01
         notifications_push sid 01
         notifications_sms sid 01
         role       sid 01
         servicenumber sid 01
         status     sid 01
         token      reading 01
       get01:
         DeviceData-1 get 01-1
         DeviceData-10 get 01-10
         DeviceData-11 get 01-11
         DeviceData-12 get 01-12
         DeviceData-13 get 01-13
         DeviceData-14 get 01-14
         DeviceData-15 get 01-15
         DeviceData-16 get 01-16
         DeviceData-17 get 01-17
         DeviceData-18 get 01-18
         DeviceData-19 get 01-19
         DeviceData-2 get 01-2
         DeviceData-20 get 01-20
         DeviceData-21 get 01-21
         DeviceData-22 get 01-22
         DeviceData-23 get 01-23
         DeviceData-24 get 01-24
         DeviceData-25 get 01-25
         DeviceData-26 get 01-26
         DeviceData-27 get 01-27
         DeviceData-28 get 01-28
         DeviceData-29 get 01-29
         DeviceData-3 get 01-3
         DeviceData-30 get 01-30
         DeviceData-31 get 01-31
         DeviceData-32 get 01-32
         DeviceData-33 get 01-33
         DeviceData-34 get 01-34
         DeviceData-35 get 01-35
         DeviceData-36 get 01-36
         DeviceData-37 get 01-37
         DeviceData-38 get 01-38
         DeviceData-39 get 01-39
         DeviceData-4 get 01-4
         DeviceData-40 get 01-40
         DeviceData-41 get 01-41
         DeviceData-42 get 01-42
         DeviceData-43 get 01-43
         DeviceData-44 get 01-44
         DeviceData-45 get 01-45
         DeviceData-46 get 01-46
         DeviceData-47 get 01-47
         DeviceData-48 get 01-48
         DeviceData-49 get 01-49
         DeviceData-5 get 01-5
         DeviceData-50 get 01-50
         DeviceData-51 get 01-51
         DeviceData-52 get 01-52
         DeviceData-53 get 01-53
         DeviceData-54 get 01-54
         DeviceData-55 get 01-55
         DeviceData-56 get 01-56
         DeviceData-57 get 01-57
         DeviceData-58 get 01-58
         DeviceData-59 get 01-59
         DeviceData-6 get 01-6
         DeviceData-60 get 01-60
         DeviceData-61 get 01-61
         DeviceData-62 get 01-62
         DeviceData-63 get 01-63
         DeviceData-64 get 01-64
         DeviceData-65 get 01-65
         DeviceData-66 get 01-66
         DeviceData-67 get 01-67
         DeviceData-68 get 01-68
         DeviceData-69 get 01-69
         DeviceData-7 get 01-7
         DeviceData-70 get 01-70
         DeviceData-71 get 01-71
         DeviceData-72 get 01-72
         DeviceData-73 get 01-73
         DeviceData-74 get 01-74
         DeviceData-75 get 01-75
         DeviceData-8 get 01-8
         DeviceData-9 get 01-9
         command    get 01
         data_01_data_01_da get 01
         data_01_data_01_data_10_data get 01
         data_01_data_01_data_10_er get 01
         data_01_data_01_data_10_st get 01
         data_01_data_01_data_12_data get 01
         data_01_data_01_data_12_er get 01
         data_01_data_01_data_12_st get 01
         data_01_data_01_data_14_data get 01
         data_01_data_01_data_14_er get 01
         data_01_data_01_data_14_st get 01
         data_01_data_01_data_1_data get 01
         data_01_data_01_data_1_er get 01
         data_01_data_01_data_1_st get 01
         data_01_data_01_data_2_data get 01
         data_01_data_01_data_2_er get 01
         data_01_data_01_data_2_st get 01
         data_01_data_01_data_3_data get 01
         data_01_data_01_data_3_er get 01
         data_01_data_01_data_3_st get 01
         data_01_data_01_data_5_data get 01
         data_01_data_01_data_5_er get 01
         data_01_data_01_data_5_st get 01
         data_01_data_01_data_63_data get 01
         data_01_data_01_data_63_er get 01
         data_01_data_01_data_63_st get 01
         data_01_data_01_data_6_data get 01
         data_01_data_01_data_6_er get 01
         data_01_data_01_data_6_st get 01
         data_01_data_01_data_790_data get 01
         data_01_data_01_data_790_er get 01
         data_01_data_01_data_790_st get 01
         data_01_data_01_data_791_data get 01
         data_01_data_01_data_791_er get 01
         data_01_data_01_data_791_st get 01
         data_01_data_01_data_792_data get 01
         data_01_data_01_data_792_er get 01
         data_01_data_01_data_792_st get 01
         data_01_data_01_data_7_data get 01
         data_01_data_01_data_7_er get 01
         data_01_data_01_data_7_st get 01
         data_01_data_01_data_8_data get 01
         data_01_data_01_data_8_er get 01
         data_01_data_01_data_8_st get 01
         data_01_data_01_data_90_data get 01
         data_01_data_01_data_90_er get 01
         data_01_data_01_data_90_st get 01
         data_01_data_01_data_92_data get 01
         data_01_data_01_data_92_er get 01
         data_01_data_01_data_92_st get 01
         data_01_data_01_data_93_data get 01
         data_01_data_01_data_93_er get 01
         data_01_data_01_data_93_st get 01
         data_01_data_01_data_94_data get 01
         data_01_data_01_data_94_er get 01
         data_01_data_01_data_94_st get 01
         data_01_data_01_data_9_data get 01
         data_01_data_01_data_9_er get 01
         data_01_data_01_data_9_st get 01
         data_01_data_01_data_lu get 01
         data_01_data_01_dt get 01
         data_01_data_01_hv get 01
         data_01_data_01_sv get 01
         data_01_disable_time get 01
         data_01_hardness_heater get 01
         data_01_hardness_shower get 01
         data_01_hardness_washing get 01
         data_01_hardness_watering get 01
         data_01_hv get 01
         data_01_installation_date get 01
         data_01_serialnumber get 01
         data_01_status get 01
         data_01_sv get 01
         data_01_update get 01
         data_01_waterscene get 01
         data_01_waterscene_normal get 01
         status     get 01
         token      get 01
   lastpoll:
     DeviceData 1644063818.03912
Attributes:
   authRetries 2
   enableControlSet 1
   extractAllJSON 1
   get01JSON  data
   get01Name  DeviceData
   get01Poll  1
   get01PollDelay 300
   get01URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
   get02JSON  data
   get02Name  WaterConsumptionDay
   get02URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%&date=%date%&parameter=day
   getHeader1 Content-Type: application/json
   getHeader2 Accept: */*
   group      JuDo
   reAuthRegex (error)|(login failed)
   reading01JSON data
   reading01Name token
   reading01Regex "token":"([^"]+)"
   reading02JSON group
   reading03JSON command
   reading03OExpr $val =~ s/\s/-/; $val; readingsBulkUpdate($hash,$val,ReadingsVal("JUDO_iSoft","data",""))
   replacement01Mode reading
   replacement01Regex %token%
   replacement01Value token
   replacement02Mode text
   replacement02Regex %JUDO_ipaddress%
   replacement02Value www.myjudo.eu
   replacement03Mode text
   replacement03Regex %JUDO_password%
   replacement03Value XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
   replacement04Mode text
   replacement04Regex %JUDO_username%
   replacement04Value XXXXXXXXXX
   replacement05Mode text
   replacement05Regex %JUDO_serial%
   replacement05Value XX:XX:XX:XX:XX:XX
   room       Garage
   set01Name  CloseValve
   set01URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=valve&msgnumber=1&token=%token%&parameter=close
   set02Name  OpenValve
   set02URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=valve&msgnumber=1&token=%token%&parameter=open
   set03Name  residual-hardness
   set03URL   https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=residual%20hardness&msgnumber=1&token=%token%&parameter=$val
   showBody   1
   showError  1
   sid01ParseResponse 1
   sid01URL   https://%JUDO_ipaddress%/interface/?group=register&command=login&name=login&user=%JUDO_username%&password=%JUDO_password%&nohash=Service&role=customer
   stateFormat data_01_status
   timeout    5
   userReadings waterTotal { ( hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 4, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-41", ''), 0, 2)) / 1000 ). ' m³'},
waterProcessed { ( hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 4, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-53", ''), 0, 2)) / 1000 ). ' m³'},
saltLevel { ( hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_94_data", ''), 0, 2))  ). ' g'},
saltRange { hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 4, 2)). " Tage" }
   userattr   replacement06Mode:reading,internal,text,expression,key replacement06Regex replacement06Value


Die lokale Oberfläche lässt sich aufrufen mit:
http://192.168.XXX.XXX/index.htm
Hier werden folgende Punkte angezeigt:
eWAC
Seriennummer
FW-Version
MAC address LAN
MAC address WLAN
Infos
CntApp=
CntInter=
CntPerm=
CntEep=
Seconds since start: 608657
busDevice: da=0x1, dt=0x33, sv=2.11i, hv=5.10,OPERATING


Ich komme leider nicht weiter - JuDo antwortet nicht auf meine Anfragen.

Vielen Dank für die tolle Vorarbeit bei diesem Modul. Über eine Lösung würde ich mich sehr freuen!

SebastianStorb

Die Anlage lässt sich bei mir bis heute nicht mit FHEM steuern (nur einige Readings auslesen). Daher war es für mich ein riesiger teurer Fehler diese Anlage zu kaufen. Die Motivation zum Kauf bei Judo kam aus der Annahme, dass es ein funktionierendes Modul bzw. eine funktionierende Möglichkeit gibt diese mit FHEM zu steuern. Die Foreneinträge und WiKi Einträge erwecken den Eindruck.

Ich kann nur jeden davor warnen sich für JuDo zu entscheiden. Support bei JuDo ist unterirdisch. Keine Antwort auf e-Mail Anfragen, Telefonische Antworten landen auf dem Anrufbeantworter. Klar dass von der Firma JuDo niemand zurückruft.

Wenn sich jemand JuDo kauft: dann nur exakt die Anlage, die im Wiki Beschrieben ist (dann könnte ich mir vorstellen, dass es funktioniert).

K E I N E  K A U F E M P F E H L U N G

KEINESFALLS die i-soft SAFE+
B E S S E R  N I C H T  J U D O !

Auch dieser Threat ist leider tot  >:(

ch.eick

#34
Zitat von: SebastianStorb am 19 Mai 2022, 21:54:53
Die Anlage lässt sich bei mir bis heute nicht mit FHEM steuern (nur einige Readings auslesen). Daher war es für mich ein riesiger teurer Fehler diese Anlage zu kaufen. Die Motivation zum Kauf bei Judo kam aus der Annahme, dass es ein funktionierendes Modul bzw. eine funktionierende Möglichkeit gibt diese mit FHEM zu steuern. Die Foreneinträge und WiKi Einträge erwecken den Eindruck.

Ich kann nur jeden davor warnen sich für JuDo zu entscheiden. Support bei JuDo ist unterirdisch. Keine Antwort auf e-Mail Anfragen, Telefonische Antworten landen auf dem Anrufbeantworter. Klar dass von der Firma JuDo niemand zurückruft.

Wenn sich jemand JuDo kauft: dann nur exakt die Anlage, die im Wiki Beschrieben ist (dann könnte ich mir vorstellen, dass es funktioniert).

K E I N E  K A U F E M P F E H L U N G

KEINESFALLS die i-soft SAFE+
B E S S E R  N I C H T  J U D O !

Auch dieser Threat ist leider tot  >:(

Moin,
kann das sein, dass Du eine Mischung des Judo Moduls und dem Judo HTTPMOD verwendest?
Die iSoft safe geht nur über das Judo Portal mit dem Modul.

Die normale iSoft (ohne safe) kann lokal kommunizieren, was dann über HTTPMOD gelöst wurde.
Dazu gehören dann auch die set Aufrufe, die Du aufgelistet hast. Diese gehören nicht zur iSoft safe .

Wenn Du nun eine iSoft Safe hast, dann geht nur das Modul (nicht HTTPMOD!), dass mit dem Judo Portal kommuniziert.

Ich habe die iSoft Plus und da hat leider Judo durch einen Firmware Bug die lokale Kommunikation gekilled. Die Firmware wurde durch Judo sofort bei mir vor Ort neu geladen, wodurch zumindest das Portal wieder verwendbar ist. Für die lokale Anbindung hatte ich noch keine Muße das wieder in Gang zu setzen. Vorhor hatte das Monitoring und auch das Setzen/Schalten tadellos funktioniert.

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

tobi01001

Hallo zusammen,

ich häng mich hier mal dran da wir im Sanierungsobjekt auch eine i-Soft eingebaut haben. Über das Connectivity Modul lässt diese sich über das Judo - Ju-Control Portal steuern.
Mit dem Wiki und diesem Thread hab ich mich dann dran gemacht die Werte nach Fhem zu bekommen und auch Werte an die anlage schicken zu können.

Mit der Starthilfe und dem Entwicklermodus konnte ich die Daten hinreichend entziffern und jemand der Modulentwicklung kann, könnte daraus theoretisch auch ein Judo-Modul basteln.

Jedenfalls implementiert die Internet-Version der Ju-Control alle Kontrollfähigen Judo-Geräte.
In den js-scripts kann man sich das Interface zusammensuchen und über die URL's, deren Payload und Response kann man sich den Rest erarbeiten.

Disclaimer:

  • habe ich kaum Erfahrung mit HTTPMOD
  • ist bei uns noch Baustelle und kein realistischer produktiver Einsatz. Die Readings sind auch noch etwas wild benannt....
  • habe ich noch nicht alle Daten die zurückkommen als Reading umgesetzt bzw. "dekodiert"
  • habe ich von den abgesetzten Kommandos bisher nur die Resthärte umgesetzt und das noch nicht an den jeweiligen Gerätetyp angepasst.
Das funktioniert soweit aber sehr gut.
[/list]

Nun zum eingemachten:
Die iSoft schickt in den Device Data jede Menge Werte (nach "data->id" geordnet), welche oft Hexadezimal und manchmal auch als Datenblock zurückgegeben werden. Die miesten brauchbaren Informationen stecken in den Datenblöcken.
Beispiel:

{"data":[
     ...,
     "data":[
        ...,
        "790":{
            "data":"0:00010F180000100007000E000702D70000000000000037000000110228006900",
            "st":"OK",
            "er":""
         }
         ,...
     ],
     ...
     "status":"ok",
     "token":"blablabla",
     "command":"get device data"
}

In deviceDataConverter.js?version=1.220 finden wir dazu dann:

// Auslesen der Datentabelle / Get_Tableread
        // 1 byte subcode (32 byte response)
        // SUBCODE 0
        case 790:
            value = "";
            if (data.length == 66) {
                if (subIndex !== null) {
                    data = data.toString().split(':')[1];
                    switch (subIndex) {

                        //Notstrommodul Ja/Nein
                        case 2:
                            value = parseInt("0x"+data.slice(2, 4));
                            value = (+value).toString(2);
                            while (value.length<8) value="0"+value;
                            break;

                        // Anzeige resthärte
                        case 8:
                            value = parseInt(data.slice(8*2, 9*2), 16);
                            break;

                        // Anzeige rohhärte / aktuelle Rohwasserhärte
                        case 10:
                            value = parseInt(data.slice(10*2, 11*2), 16);
                            break;

                        // Anzeige rohhärte / Rohwasserhärte1 in °dH
                        case 26:
                            value = parseInt(data.slice(26*2, 27*2),16);
                            break;

                        // Wasserdurchfluss
                        case 1617:
                            var tWW_DURCHFLUSS_LO = parseInt(data.slice(32, 34), 16);
                            var tWW_DURCHFLUSS_HI = parseInt(data.slice(34, 36), 16);
                            value = (tWW_DURCHFLUSS_HI * 256) + tWW_DURCHFLUSS_LO;
                            break;
                    }
                }else{

                }
            }
            break;

Also bekommen wir aus dem Block 790 die Informationen:

  • Notstrommodul Ja/Nein
  • resthärte - entspricht der Wunschwasserhärte
  • Rohwasserhärte
  • Rohwasserhärte in °dH - den Wert nehme ich zum Vergleich
  • Wasserdurchfluss - wenig sinnvoll, da Momentanwert vs. Polling

Das j-script sagt uns auch wo die Informationen im Block zu finden sind und damit können wir das schon im fhem auswerten und als Reading darstellen (Beispiel Resthärte):



attr JUDO_iSoft reading163Expr $val = substr($val,2);; hex(substr($val,16,2))
attr JUDO_iSoft reading163JSON data_01_data_01_data_790_data
attr JUDO_iSoft reading163Name Resthaerte

Dazu folgende kleine Erklärung:
$val = substr($val,2);; - entfernt lediglich die "0:" vorn. Das hat nur den Zweck, damit die späteren Indizes gleichbleibend zum JScript bleiben können (ansonsten -2 offset).
hex(substr($val,16,2)) - schnappt sich an Position 16 zwei Bytes und gibt den Hexwert als Dezimalwert zurück.

Ein DOIF setzt mir zudem zwei Readings täglich um 00:00 auf den Wert des Gesamtwasserverbrauchs und der Weichwassermenge. Zwei Userreadings zeigen dann über den Tag verteilt (als Differenz zum Gesamtverbrauch) den Tagesverbauch an Wasser. Dann braucht man dieses "get chart data" auch nicht, da man sich das selbst ausrechnen kann...

Mit dem Setzen der Resthärte kann man jetzt prima automatisch die Wunschhärte nach beliebigen Bedingungen setzen.
Eventuell kann man dafür aber auch die Wasserszenen nutzen. Die können mehr. Beispielsweise wird beim Aufruf die Zeit zur Rückkehr in "Normalbetrieb" mit übergeben und man könnte (noch nicht probiert) die genaue Zeit angeben (als UTC timestamp)... Das habe ich aber noch nicht umgesetzt.

Fazit:
Ich bin noch nicht am Ziel, aber ich glaube man kann damit so ziemlich alles machen, was ich mir vorgestellt habe. Einziger Wermutstropfen: Das Ding muss aktuell mit Judo kommunizieren (und fhem auch) und kann nicht im lokalen Netz gesteuert werden.

Hier noch meine Gerätedefinition:

defmod JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data 180
attr JUDO_iSoft authRetries 2
attr JUDO_iSoft enableControlSet 1
attr JUDO_iSoft event-min-interval .*:3600
attr JUDO_iSoft event-on-change-reading .*
attr JUDO_iSoft get01Name DeviceData
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
attr JUDO_iSoft get03CheckAllReadings 1
attr JUDO_iSoft get03Name DeviceInfo
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=show&application=JC
attr JUDO_iSoft get04CheckAllReadings 1
attr JUDO_iSoft get04Name LocationInfo
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=showlocation
attr JUDO_iSoft getHeader1 Content-Type: application/json
attr JUDO_iSoft getHeader2 Accept: */*
attr JUDO_iSoft icon wasserzaehler_icon
attr JUDO_iSoft reAuthRegex "data":"login failed"
attr JUDO_iSoft reading01JSON data
attr JUDO_iSoft reading01Name token
attr JUDO_iSoft reading01Regex "token":"([^"]+)"
attr JUDO_iSoft reading02JSON group
attr JUDO_iSoft reading03JSON command
attr JUDO_iSoft reading100JSON status
attr JUDO_iSoft reading100Name status
attr JUDO_iSoft reading101JSON data_01_holiday_mode
attr JUDO_iSoft reading101Name Urlaubsmodus
attr JUDO_iSoft reading102JSON data_01_sv
attr JUDO_iSoft reading102Name SW_Version_Connectivity_Modul
attr JUDO_iSoft reading103JSON data_01_hardness_heater
attr JUDO_iSoft reading103Name Wasserhärte_Heizung
attr JUDO_iSoft reading104JSON data_01_waterscene
attr JUDO_iSoft reading104Name Wasserszene
attr JUDO_iSoft reading105JSON data_01_waterscene_time_heater
attr JUDO_iSoft reading105Name Wasserdauer_Heizung
attr JUDO_iSoft reading106JSON data_01_data_01_hv
attr JUDO_iSoft reading106Name Version_Hardware
attr JUDO_iSoft reading107JSON data_01_data_01_data_3_data
attr JUDO_iSoft reading107Name Gerätenummer
attr JUDO_iSoft reading108JSON data_01_data_01_data_6_data
attr JUDO_iSoft reading108Name Inbetriebnahmedatum
attr JUDO_iSoft reading110Expr (hex(substr($val,2,2).substr($val,0,2)))
attr JUDO_iSoft reading110JSON data_01_data_01_data_90_data
attr JUDO_iSoft reading110Name Rohhaerte
attr JUDO_iSoft reading111JSON data_01_waterscene_normal
attr JUDO_iSoft reading111Name Wasserhärte_Normal
attr JUDO_iSoft reading113JSON data_01_hardness_watering
attr JUDO_iSoft reading113Name Wasserhärte_Garten
attr JUDO_iSoft reading114Expr sprintf("%d.%d",hex(substr($val,4,2)),hex(substr($val,4,2)))
attr JUDO_iSoft reading114JSON data_01_data_01_data_2_data
attr JUDO_iSoft reading114Name HW_Version
attr JUDO_iSoft reading115JSON data_hash
attr JUDO_iSoft reading115Name data_hash
attr JUDO_iSoft reading116JSON data_01_update_running
attr JUDO_iSoft reading116Name Update_Running
attr JUDO_iSoft reading117JSON data_01_serial number
attr JUDO_iSoft reading117Name Device_Serial
attr JUDO_iSoft reading118JSON data_01_device_update_status
attr JUDO_iSoft reading118Name Update_Status
attr JUDO_iSoft reading119JSON data_01_id
attr JUDO_iSoft reading119Name Device_ID
attr JUDO_iSoft reading120JSON data_01_location
attr JUDO_iSoft reading120Name Location
attr JUDO_iSoft reading121JSON data_01_ewac_update_status
attr JUDO_iSoft reading121Name ewac_update_status
attr JUDO_iSoft reading122JSON data_01_devicename
attr JUDO_iSoft reading122Name Name
attr JUDO_iSoft reading123JSON data_01_parameter
attr JUDO_iSoft reading123Name Parameter
attr JUDO_iSoft reading124JSON data_01_zipcode
attr JUDO_iSoft reading124Name Location_Postleitzahl
attr JUDO_iSoft reading125JSON data_01_description
attr JUDO_iSoft reading125Name Location_Description
attr JUDO_iSoft reading126JSON data_01_streetnumber
attr JUDO_iSoft reading126Name Location_Hausnummer
attr JUDO_iSoft reading127JSON data_01_city
attr JUDO_iSoft reading127Name Location_Stadt
attr JUDO_iSoft reading128JSON data_01_street
attr JUDO_iSoft reading128Name Location_Strasse
attr JUDO_iSoft reading129JSON data_01_country
attr JUDO_iSoft reading129Name Location_Land
attr JUDO_iSoft reading130Expr int(hex(substr($val,2,2).substr($val,0,2))/24)
attr JUDO_iSoft reading130JSON data_01_data_01_data_7_data
attr JUDO_iSoft reading130Name Wartung_Tage
attr JUDO_iSoft reading131Expr hex(substr($val,6,2).substr($val,4,2))
attr JUDO_iSoft reading131JSON data_01_data_01_data_7_data
attr JUDO_iSoft reading131Name Wartungen_Done
attr JUDO_iSoft reading132Expr hex(substr($val,10,2).substr($val,8,2))
attr JUDO_iSoft reading132JSON data_01_data_01_data_7_data
attr JUDO_iSoft reading132Name Wartungen_Ordered
attr JUDO_iSoft reading136JSON data_01_status
attr JUDO_iSoft reading136Name Geraetestatus
attr JUDO_iSoft reading138JSON token
attr JUDO_iSoft reading138Name token
attr JUDO_iSoft reading139JSON data_01_waterscene_time
attr JUDO_iSoft reading139Name Wasserdauer
attr JUDO_iSoft reading140Expr $val = substr($val,2);; hex(substr($val,0,2))
attr JUDO_iSoft reading140JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading140Name Wasserstop_State_STNDBY
attr JUDO_iSoft reading141Expr $val = substr($val,2);; hex(substr($val,18,2))
attr JUDO_iSoft reading141JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading141Name Wasserstop_STBY_Mode_Hours
attr JUDO_iSoft reading142Expr $val = substr($val,2);; hex(substr($val,36,2))
attr JUDO_iSoft reading142JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading142Name Wasserstop_Vacation_Mode
attr JUDO_iSoft reading143Expr $val = substr($val,2);; hex(substr($val,38,2))
attr JUDO_iSoft reading143JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading143Name Wasserstopp_Sleepmode_Time
attr JUDO_iSoft reading144Expr $val = substr($val,2);; hex(substr($val,26,2).substr($val,24,2))
attr JUDO_iSoft reading144JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading144Name Wasserstop_Throughput_Max
attr JUDO_iSoft reading145Expr $val = substr($val,2);; hex(substr($val,30,2).substr($val,28,2))
attr JUDO_iSoft reading145JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading145Name Wasserstop_Water_Max
attr JUDO_iSoft reading146Expr $val = substr($val,2);; hex(substr($val,34,2).substr($val,32,2))
attr JUDO_iSoft reading146JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading146Name Wasserstop_Water_Max_Time
attr JUDO_iSoft reading147Expr $val = substr($val,2);; hex(substr($val,60,2))
attr JUDO_iSoft reading147JSON data_01_data_01_data_792_data
attr JUDO_iSoft reading147Name Wasserstop_Microleak_state
attr JUDO_iSoft reading148Expr $val = substr($val,2);; hex(substr($val,62,2).substr($val,60,2))
attr JUDO_iSoft reading148JSON data_01_data_01_data_791_data
attr JUDO_iSoft reading148Name Regenerationen
attr JUDO_iSoft reading149Expr $val = substr($val,2);; (hex(substr($val,0,2))&0x01)
attr JUDO_iSoft reading149JSON data_01_data_01_data_791_data
attr JUDO_iSoft reading149Name Status_Betrieb_Regeneration
attr JUDO_iSoft reading160JSON data_01_serialnumber
attr JUDO_iSoft reading160Name Seriennummer_MacAdresse
attr JUDO_iSoft reading162Expr $val = substr($val,2);; hex(substr($val,2,2))
attr JUDO_iSoft reading162JSON data_01_data_01_data_790_data
attr JUDO_iSoft reading162Name Notstrommodul
attr JUDO_iSoft reading163Expr $val = substr($val,2);; hex(substr($val,16,2))
attr JUDO_iSoft reading163JSON data_01_data_01_data_790_data
attr JUDO_iSoft reading163Name Resthaerte
attr JUDO_iSoft reading164Expr $val = substr($val,2);; hex(substr($val,20,2))
attr JUDO_iSoft reading164JSON data_01_data_01_data_790_data
attr JUDO_iSoft reading164Name Rohhaerte
attr JUDO_iSoft reading165Expr $val = substr($val,2);; hex(substr($val,52,2))
attr JUDO_iSoft reading165JSON data_01_data_01_data_790_data
attr JUDO_iSoft reading165Name Rohhaerte_dH
attr JUDO_iSoft reading166Expr $val = substr($val,2);; hex(substr($val,34,2).substr($val,32,2))
attr JUDO_iSoft reading166JSON data_01_data_01_data_790_data
attr JUDO_iSoft reading166Name Current_Throughput
attr JUDO_iSoft reading167Expr (hex(substr($val,2,2).substr($val,0,2))/1000)
attr JUDO_iSoft reading167JSON data_01_data_01_data_94_data
attr JUDO_iSoft reading167Name Salzvorrat_kg
attr JUDO_iSoft reading168Expr (hex(substr($val,6,2).substr($val,4,2)))
attr JUDO_iSoft reading168JSON data_01_data_01_data_94_data
attr JUDO_iSoft reading168Name Salzvorrat_Reichweite_Tage
attr JUDO_iSoft reading169JSON data_01_installation_date
attr JUDO_iSoft reading169Name Installationsdatum
attr JUDO_iSoft reading170JSON data_01_data_01_sv
attr JUDO_iSoft reading170Name SW_Version
attr JUDO_iSoft reading171JSON data_01_hv
attr JUDO_iSoft reading171Name HW_Version
attr JUDO_iSoft reading174JSON data_01_update
attr JUDO_iSoft reading174Name Update
attr JUDO_iSoft reading175Expr (hex(substr($val,6,2).substr($val,4,2)))." Tage, ".(hex(substr($val,2,2)))." Stunden ".hex(substr($val,0,2))." Minuten"
attr JUDO_iSoft reading175JSON data_01_data_01_data_14_data
attr JUDO_iSoft reading175Name Uptime
attr JUDO_iSoft reading176Expr hex(substr($val,6,2).substr($val,4,2).substr($val,2,2).substr($val,0,2))
attr JUDO_iSoft reading176JSON data_01_data_01_data_9_data
attr JUDO_iSoft reading176Name Weichwassermenge
attr JUDO_iSoft reading177JSON data_01_hardness_shower
attr JUDO_iSoft reading177Name Wasserhärte_Duschen
attr JUDO_iSoft reading184JSON data_01_waterscene_time_garden
attr JUDO_iSoft reading184Name Wasserdauer_Garten
attr JUDO_iSoft reading188Expr sprintf("%d.%d",hex(substr($val,4,2)),hex(substr($val,4,2)))
attr JUDO_iSoft reading188JSON data_01_data_01_data_1_data
attr JUDO_iSoft reading188Name SW_Version
attr JUDO_iSoft reading191Expr (hex(substr($val,6,2).substr($val,4,2).substr($val,2,2).substr($val,0,2)))
attr JUDO_iSoft reading191JSON data_01_data_01_data_8_data
attr JUDO_iSoft reading191Name Gesamtwasserverbrauch
attr JUDO_iSoft reading193JSON data_01_hardness_washing
attr JUDO_iSoft reading193Name Wasserhärte_Waschen
attr JUDO_iSoft reading196JSON data_01_data_01_data_lu
attr JUDO_iSoft reading196Name Lokale_Zeit
attr JUDO_iSoft reading198Expr ((hex(substr($val,6,2).substr($val,4,2)))*24+(hex(substr($val,2,2)))).":".sprintf("%02d", hex(substr($val,0,2)))
attr JUDO_iSoft reading198JSON data_01_data_01_data_5_data
attr JUDO_iSoft reading198Name Betriebsstunden
attr JUDO_iSoft replacement01Mode reading
attr JUDO_iSoft replacement01Regex %token%
attr JUDO_iSoft replacement01Value token
attr JUDO_iSoft replacement02Mode text
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%
attr JUDO_iSoft replacement02Value www.myjudo.eu
attr JUDO_iSoft replacement03Mode text
attr JUDO_iSoft replacement03Regex %JUDO_password%
attr JUDO_iSoft replacement03Value [b]"Passwort als MD5 Hash"[/b]
attr JUDO_iSoft replacement04Mode text
attr JUDO_iSoft replacement04Regex %JUDO_username%
attr JUDO_iSoft replacement04Value [b]Ju-Control_Benutzername[/b]
attr JUDO_iSoft replacement05Mode text
attr JUDO_iSoft replacement05Regex %nohash%
attr JUDO_iSoft replacement05Value [b]"Passwort als Klartext"[/b] - [i]War bei mir im Aufruf so mit drin. Bin mir nicht sicher ob das auch ohne funktioniert. Wahrschienlich schon..[/i]
attr JUDO_iSoft replacement06Mode reading
attr JUDO_iSoft replacement06Regex %date%
attr JUDO_iSoft replacement06Value date
attr JUDO_iSoft replacement07Mode reading
attr JUDO_iSoft replacement07Regex %JUDO_serial%
attr JUDO_iSoft replacement07Value Seriennummer_MacAdresse
attr JUDO_iSoft room temp
attr JUDO_iSoft set01Hint 1,2,3,4,5,6,7,8,9,10
attr JUDO_iSoft set01Max 10
attr JUDO_iSoft set01Min 1
attr JUDO_iSoft set01Name Resthaerte
attr JUDO_iSoft set01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x32&index=60&da=0x1&role=customer&action=normal&data=$val
attr JUDO_iSoft showError 1
attr JUDO_iSoft sid01ParseResponse 1
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%/interface/?group=register&command=login&name=login&user=%JUDO_username%&password=%JUDO_password%&nohash=%nohash%&role=customer
attr JUDO_iSoft stateFormat Gesamtverbrauch i-Soft: Gesamtwasserverbrauch Liter <br> Weichwasser: Weichwassermenge Liter<br>Salzvorrat: Salzvorrat_kg kg<br>Salzreichweite: Salzvorrat_Reichweite_Tage
attr JUDO_iSoft timeout 5
attr JUDO_iSoft userReadings Tagesverbrauch_Wasser {ReadingsVal("JUDO_iSoft","Gesamtwasserverbrauch",0) - ReadingsVal("JUDO_iSoft","Tagesstartwert_Verbrauch",0);;},Tagesweichwasser {ReadingsVal("JUDO_iSoft","Weichwassermenge",0) - ReadingsVal("JUDO_iSoft","Tagesstartwert_Weichwasser",0);;}

setstate JUDO_iSoft 2022-06-27 21:50:52 token blablabla

Das setstate am Ende ist relativ wichtig. Der Token darf beim Aufruf nicht leer sein. Ohne token kommt vom Server gar nichts zurück und dann funktioniert (zumindest der hier definierte) re-auth Mechanismus nicht und man bekommt keinen Token und keine Daten...


ToDo:

  • Andere Get/Set-Befehle mit Einbinden / Urlaubsmode etc...) - bei Szenen mit Sleepmodus ist das nicht soo leicht, da beim umschalten noch eine Sicherheitsabfrage zur Bestätigung kommt
  • Gerätetyp mit Auswerten / Anzeigen (Parameter "dt" - device type). Mein iSoft is 0x32 - eine iSoft  :)
  • Warnung Salzvorrat und evtl andere Meldungen
  • ...





Viele Grüße,
Toby
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

SebastianStorb

#36
Hallo Tobi,

das ist der erste JuDo Beitrag im Forum, der bei mir funktioniert. Ich habe seit Februar fast jeden Abend etwas anderes in FHEM probiert. Immer wieder die Forenbeiträge studiert - ohne Erfolg.

Jetzt bin ich extrem happy, dass jetzt endlich mal etwas geklappt hat! Gratulation, dass du es geschafft hast! (Ich kann leider nur copy und paste bzw. try and error und verstehe das Thema httpmod überhaupt nicht).

Hast Du eine Idee, warum ich die Wasserhärte nicht verstellen kann (gibt es irgendwo eine Fehlermeldung)? Wenn ich zB von 6 auf 1 stellen möchte passiert nichts - auch FHEM "zuckt" noch nicht einmal. Woher ist Dir die SET Adresse bekannt? Kann ich diese für meinen www.Judo.eu Zugang irgendwo herausfinden? Vielleicht stimmt dieser für meinen Zugang so in dieser Form nicht?

https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x32&index=60&da=0x1&role=customer&action=normal&data=$val

Hier mal mein Inhalt vom Body (ich hoffe da sind keine Zugangsdaten von mir drin ::) ):

{"data":[{"serialnumber":"XXXXXXXX","installation_date":"2022-02-03T20:08:36","status":"online","sv":"1.12","hv":"1.0","data":[{"da":"0x1","dt":"0x33","sv":"2.11i","hv":"5.10","data":{"1":{"data":"690B02","st":"OK","er":""},"2":{"data":"0A05","st":"OK","er":""},"3":{"data":"557E0300","st":"OK","er":""},"5":{"data":"2606AE00","st":"OK","er":""},"6":{"data":"61E14D84","st":"OK","er":""},"7":{"data":"E21100000000","st":"OK","er":""},"8":{"data":"3AD60000","st":"OK","er":""},"9":{"data":"44970000","st":"OK","er":""},"10":{"data":"00","st":"OK","er":""},"12":{"data":"00","st":"OK","er":""},"14":{"data":"2606AE00","st":"OK","er":""},"63":{"data":"24","st":"OK","er":""},"90":{"data":"1300","st":"OK","er":""},"92":{"data":"0000","st":"OK","er":""},"93":{"data":"02010B64B20A03000F","st":"OK","er":""},"94":{"data":"5D2F4200","st":"OK","er":""},"790":{"data":"0:00630F300000110006071300A202DE000000000000004D0BEF05160238003B00","st":"OK","er":""},"791":{"data":"1:C0000000004040120C18C300D400000000000000000001003800910C34019800","st":"OK","er":""},"792":{"data":"2:003C1E000000000047000000A00FF4011E004306A00FF4010016B7031E000000","st":"OK","er":""},"793":null,"794":null,"lu":"7\/7\/2022 - 18:53:35"}}],"errors":[],"waterscene_time":null,"waterscene_time_garden":null,"waterscene_time_heater":null,"waterscene_time_washing":null,"waterscene":"normal","disable_time":"","waterscene_normal":"1","hardness_shower":"4","hardness_watering":"10","hardness_heater":"1","hardness_washing":"1","sleepmode_time":null,"holiday_mode":null,"update":"0"}],"status":"ok","token":"19af0932a03cf11151ab0182aa86b1b6","command":"get device data"}

Es wäre sensationell, wenn Du noch eine Idee zum Steuern meine Anlage über FHEM hättest.

Viele Grüße

Sebastian :)


tobi01001

Hallo Sebastian,

schön dass du damit was anfangen kannst. Das setzen der Wunschhärte funktioniert wahrscheinlich wegen den angeführten Punkten 3 und 4 noch nicht.
Ich werde das noch in Readings umbauen.
In deinem Fall scheint es auf dem ersten Blick der Device Type zu sein (habe ich fest auf i-Soft dt=0x32 gesetzt). Aus deinen Daten lese ich ein dt=0x33.
Für den ersten Versuch bitte mal den device type auf 0x33 im set Aufruf setzten:

attr JUDO_iSoft set01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&da=0x1&role=customer&action=normal&data=$val


Schau mal ob das direkt funktioniert (wird im fhem erst mit der nächsten regulären Abfrage oder einem manuellen reread aktualisiert) und melde kurz zurück.

Gruß,
Tobi




PS: Etwas mehr Details zum Vorgehen und nachvollziehen:

Zugangsdaten sind im Body nicht drin. Serial hast du rausgenommen. Der Token ist noch zu finden. Aber ich glaube mit dem allein kann man nix anrichten...

Was fhem sendet und zurück bekommt, siehst du (oder jemand anderes) am Besten wenn du attr JUDO_iSoft verbose 5 setzt, den Aufruf ausführst und dann im Log nachschaust. Da ist dann ziemlich viel drin - inklusive der Antwort.

Was du über JU-Control machst, kannst du z.B. folgendermaßen nachverfolgen:
In einen Chromium-Basierten Browser (Chrome, Edge) die Seite zum Steuern deiner i-Soft aufrufen.
Mit Strg+Shift+i den Entwicklermodus starten.
Unter den Reiter Network (bei mir ist Englisch eingestellt) ist oben links ein "Aufnahmeknopf", ist der rot wird bereits aufgezeichnet und du siehst die zyklischen Abfragen der App (was wir in Fhem nachgebaut haben).
Wenn die Aufnahme läuft bei JU-Control unter Einstellungen die Wasserhärte ändern und warten bis die Seite sich aktualisiert hat. Dann (optional) den Aufnahmeknopf pausieren.
Du findest dann im Entwicklermodus unter Name die Aufrufe und wenn du einen anklickst unter den Reitern "Header (roh), Payload (lesbar formatiert)" den Aufruf (wir suchen command "write data") und unter "Preview / Response" die Antwort.
Beim setzen kommt bei mir als Antwort lediglich "ok" und der Token. Der Aufruf ist interessanter:

Header:
https://www.myjudo.eu/interface/?token=tokentokentokenf&group=register&command=write data&serial_number=meineSerial&dt=0x32&index=60&data=5&da=0x1&role=customer&action=normal

Das habe ich in fhem eingebaut.
Wie gesagt, die entsprechenden Daten werde ich noch als Reading einpflegen, dann muss man dt und da nicht manuell setzen.

Was passiert, wenn einer mehrere Geräte hat, wäre noch spannend... Aber das soll erstmal nicht "unser Problem" sein. ;-)

Achso, im Entwicklermodus kannst du unter "Sources" noch die j-script Quellen finden. Da du nur "Copy&Paste" machst, ist das wahrscheinlich weniger interessant. Aber da stehen in der Tat allerhand Informationen drin, die man direkt verarbeiten kann (wie z.B. das dekodieren der Rohwerte oder der Device-Type):
0x32 für meine "i-soft" und 0x33 für deine "i-soft safe".

        case '67': // 0x43
        case '50': // 0x32
            device_name = 'i-soft';
            break;
        case '55': // 0x37
            device_name = 'i-soft TGA';
            break;
        case '66': // 0x42
        case '51': // 0x33
            device_name = 'i-soft safe';
            break;
        case '52': // 0x34
            device_name = 'Softwell P';
            break;
        case '53': // 0x35
            device_name = 'Softwell S';
            break;
        case '54': // 0x36
            device_name = 'Softwell K';
            break;
        case '56': // 0x38
            device_name = 'QUICKSOFT-M';
            break;
        case '57': // 0x39
            device_name = 'QUICKSOFT-P';
            break;
        case '60': // 0x3C
            device_name = 'i-fill';
            break;
        case '96': // 0x60
            device_name = 'i-fill (Demo)';
            break;
        case '88': // 0x3A
            device_name = 'i-soft UNI';
            break;
        case '65': // 0x41
        case '61': // 0x3D
            device_name = 'i-dos-ewac';
            break;
        case '68':
            device_name = 'ZEWA i-SAFE';
            break;


FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

SebastianStorb

#38
Hallo Tobi,

Deine Anleitung ist SUPER! Es hat zwar mit dem Deinem Code nicht geklappt, aber ich habe es geschafft einige Informationen zu bekommen (diese habe ich formatiert, falls jemand mal ein Modul schreiben sollte):

i-soft SAFE+
Normalbetrieb:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=201&data=2&da=0x1&role=customer&sleeptime=&action=normal&disable_time=

Duschen:
-1 Stunde
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=202&data=4&da=0x1&role=customer&sleeptime=1&action=shower&disable_time=1657349540

attr JUDO_iSoft set02Name Duschen
attr JUDO_iSoft set02URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=202&data=4&da=0x1&role=customer&sleeptime=2&action=shower&disable_time=1657471355
attr JUDO_iSoft set02NoArg 1


-2 Stunden
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=202&data=4&da=0x1&role=customer&sleeptime=2&action=shower&disable_time=1657355759

Gartenbewässerung:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=203&data=10&da=0x1&role=customer&sleeptime=1&action=watering&disable_time=1657349826

attr JUDO_iSoft set03Name Gartenbewässerung
attr JUDO_iSoft set03URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=203&data=10&da=0x1&role=customer&sleeptime=1&action=watering&disable_time=1657467708
attr JUDO_iSoft set03NoArg 1



Heizungsbefüllung:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=204&data=1&da=0x1&role=customer&sleeptime=2&action=heaterfilling&disable_time=1657353308

attr JUDO_iSoft set04Name Heizungsbefüllung
attr JUDO_iSoft set04URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=204&data=1&da=0x1&role=customer&sleeptime=2&action=heaterfilling&disable_time=1657471416
attr JUDO_iSoft set04NoArg 1


Waschen:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=205&data=1&da=0x1&role=customer&sleeptime=1&action=washing&disable_time=1657353543

attr JUDO_iSoft set05Name Waschen
attr JUDO_iSoft set05URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=205&data=1&da=0x1&role=customer&sleeptime=2&action=washing&disable_time=1657471461
attr JUDO_iSoft set05NoArg 1


Wasser absperren und entsperren:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=72&data=&da=0x1&role=customer

attr JUDO_iSoft set06Name Wasserstopp
attr JUDO_iSoft set06URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=72&data=&da=0x1&role=customer
attr JUDO_iSoft set06NoArg 1


attr JUDO_iSoft set07Name WasserstoppEnde
attr JUDO_iSoft set07URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=73&data=&da=0x1&role=customer
attr JUDO_iSoft set07NoArg 1


Urlaubsmodus:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=77&data=3&da=0x1&role=customer

attr JUDO_iSoft set08Name Urlaubsmodus
attr JUDO_iSoft set08URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=77&data=3&da=0x1&role=customer
attr JUDO_iSoft set08NoArg 1


attr JUDO_iSoft set09Name UrlaubsmodusEnde
attr JUDO_iSoft set09URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=73&data=&da=0x1&role=customer
attr JUDO_iSoft set09NoArg 1


Kleinleckageprüfung starten:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=e8eb1bee727d&dt=0x33&index=115&data=&da=0x1&role=customer

attr JUDO_iSoft set10Name Kleinlekageprüfung
attr JUDO_iSoft set10URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=115&data=&da=0x1&role=customer
attr JUDO_iSoft set10NoArg 1


Härtegrad einstellen (für die Voreinstellungen)
WUNSCHHÄRTE:
1 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=1&da=0x1&role=customer&action=normal
2 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=2&da=0x1&role=customer&action=normal
3 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=3&da=0x1&role=customer&action=normal
4 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=4&da=0x1&role=customer&action=normal
5 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=5&da=0x1&role=customer&action=normal
6 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=6&da=0x1&role=customer&action=normal
7 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=7&da=0x1&role=customer&action=normal
8 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=8&da=0x1&role=customer&action=normal
9 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=9&da=0x1&role=customer&action=normal
10 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=a&da=0x1&role=customer&action=normal
11 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=b&da=0x1&role=customer&action=normal
12 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=c&da=0x1&role=customer&action=normal
13 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=d&da=0x1&role=customer&action=normal


Anfragen die immer wieder automatisch (ohne dass ich etwas mache) generiert werden:<-unbedeutend
https://www.myjudo.eu/interface/?token=%token%&group=register&command=showlocation
https://www.myjudo.eu/interface/?token=%token%&group=register&command=show&application=JC
https://www.myjudo.eu/interface/?token=%token%&group=register&command=get device data


Fehlermeldungen:
https://www.myjudo.eu/interface/?token=%token%&group=register&command=get error messages&data_hash=0b493105621a93cb7f1416d9144e58fe

Leider habe ich es (mit try and error malwieder) nicht geschafft über FHEM in der Anlage irgendetwas zu bewirken. Folgendes hat nicht funktioniert:

attr JUDO_iSoft set01Hint 1657349540,1657355759
attr JUDO_iSoft set01Max 1657355759
attr JUDO_iSoft set01Min 1657349540


Hier habe ich jeweils nur am Ende des Codes minimal variiert:
a)attr JUDO_iSoft set01URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write data&serial_number=%JUDO_serial%&dt=0x33&index=202&data=4&da=0x1&role=customer&sleeptime=1&action=shower&disable_time=
b) attr JUDO_iSoft set01URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write data&serial_number=%JUDO_serial%&dt=0x33&index=202&data=4&da=0x1&role=customer&sleeptime=1&action=shower&disable_time=$va
c) attr JUDO_iSoft set01URL https://www.myjudo.eu/interface/?token=%token%&group=register&command=write data&serial_number=%JUDO_serial%&dt=0x33&index=202&data=4&da=0x1&role=customer&sleeptime=1&action=shower&disable_time=1657349540

Könntest Du mir den Code sagen, den ich probieren könnte? Falls nicht zu schwierig auch z.B. für 10 Minuten?

Ein Problem könnte folgendes sein
funktioniert nicht:
write data
vs
funktioniert nicht:
=red]writedata
funktioniert:
vs
write%20data
Durch das Formatieren geändert. Im Original mit %20. Durch Copy und Paste entsteht ein Leerzeichen. Hier im Beitrag habe ich es wieder so geändert wie im Entwicklermodus des Chrome Browsers gezeigt.
Es funktioniert aber so oder so nicht - ich habe beide Versionen getestet. Ich muss z.Z. bei mir noch die Seriennummer verwenden - warum %JUDO_serial% ist mir aber momentan nicht wichtig.


Die CR ist für mich leider wieder völlig unverständlich, aber ich habe die passende Stelle mal herausgesucht.
If a parameter to a set command is not numeric but should be passed on to the device as text, then you can specify the attribute setTextArg. For example:
attr PM set01TextArg
If a set command should not require a parameter at all, then you can specify the attribute NoArg. For example:
attr PM set03Name On attr PM set03NoArg


Was auch nicht funktioniert:
attr JUDO_iSoft set01TextArg 1

Außerdem ist mir noch aufgefallen, dass der zu sendende Befehl in der Judo Weboberfläche immer doppelt ausgesendet wird. Dannach kommen Anfragen, die immer wieder automatisch generiert werden.

Was funktioniert:
Wenn ich die ganz o.g. Codezeilen einfach in den Browser kopiere und absende, macht die Anlage was Sie soll.

z.B. (hier anonymisiert) zurückstellen zum Normalbetrieb:
https://www.myjudo.eu/interface/?token=96XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=write%20data&serial_number=XXXXXXXXXXXX&dt=0x33&index=201&data=6&da=0x1&role=customer&sleeptime=&action=normal&disable_time=

:) :) :)
NACH 7 1/2 Stunden try and error:

ES KLAPPT ICH HABE OBEN SO GUT ES GEHT MEINE ERKENNTNISSE EINGEBRACHT!!!!

Nicht so wichtig:
(Interessant ist, dass auch mit der JuDo App z.B. das Absperren des Wasser und beenden des Urlaubsmodus nicht umkehrbar ist. Hierzu muss ich dann an das Bedienfeld Anlage. Das habe ich mit auch mit einer 2. JudoBox, die ich noch hatte und an der Anlage ausgetauscht habe, probiert. Dieser Fehler besteht sogar noch nach dem Zurücksetzen der Anlage auf Werkeinstellungen. Das wird evlt. ein BUG sein - ach nee das wird ein Feature, wenn ich bei Judo anrufe ;)))

TOBI - DU BIST DER BESTE!!!


PSS: Extrem verwunderlich. Mir ist jetzt das erste Mal aufgefallen, dass Änderungen in der App (und jetzt auch in Fhem) überhaupt keine Änderungen in der Anlage verursachen. Hier werde ich wohl (leider) noch mal einen Versuch starten im JuDo Support jemanden zu erreichen

tobi01001

#39
Hi Sebastian,

ich habe es jetzt nicht im Detail angeschaut. Zuerst mal sehr schön, dass es bei dir funktioniert und du selbst weiter kommst. Ein paar Kommentare / Optionen zur Verbesserung (habe keine safe, von daher geht bei mir einiges nicht - bzw kann ich von fhem aus gerade eh nicht probieren).

Mit dem set01 Befehl den ich bereits eingebaut hatte, kann man direkt die Wunschhärte setzen. ...&data=$val
Über attr JUDO_iSoft set01Hint 1,2,3,4,5,6,7,8,9,10
attr JUDO_iSoft set01Max 10
attr JUDO_iSoft set01Min 1
werden die möglichen Werte bereits vorgegeben/eingeschränkt. Damit kann man sich seine Wunschhärte in Kombination mit anderen Bedingungen bereits selbst bauen (ohne der judo eine Szene zu machen ;-)).

Beim setzen deiner/der Szenen (nicht verifiziert):
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=202&data=4&da=0x1&role=customer&sleeptime=1&action=shower&disable_time=1657349540


  • data=4
    • Wunschwasserhärte kann dann direkt als Parameter mit übergeben werden
  • sleeptime=1
    • Dauer in Stunden in denen der Leckagealarm/Schutz deaktiviert wird - glaube ich zumindest ...
  • action=shower
    • Englische Bezeichung der Szene. Wird in .js files meist in Deutsch verwendet, aber in English als Parameter übergeben...
  • disable_time=1657349540
    • Das ist einer der wichtigen Parameter: Er gibt an, wann du wieder auf Normalbetrieb zurück schaltest. (UTC Zeit + Offset für Zeitzone) Damit kann man die Dauer "sekundengenau" festlegen. Allerdings ist mir die Abhängigkeit / Verbindung zu Sleeptime noch nicht klar.

EDIT:
Das manuelle setzen von Wasserszenen inkl. Parameter (ob modifiziert oder nicht) hat bei mir zu keinen zuverlässigen Ergebnissen geführt. Eher war der Status der Anlage dann online, in Fhem und physisch nicht mehr konsistent... Zudem komme bei Deaktivierung des Sleepmodus in der Online App eine Sicherheitsabfrage. Die müsste man noch separat bedienen, was mir im Moment recht aufwändig scheint. Ich werde das mal beobachten...
/EDIT

Die Online Version holt sich das alles direkt aus den gespeicherten Parametern. Wir haben diese bereits als Readings (zumindest die meisten). Aber über den Aufruf kann man die direkt mit ändern.
Ich denke, dass mir die Wunschwasserhärte in den meisten Fällen ausreicht. Über fhem kann ich mir die in Abhängigkeit irgendwelcher Ereignisse setzen wie ich es mag und/oder brauche.

Die Frage ist, was du brauchst bzw. willst. Die Wasserszenen wurden ja von Judo erstellt, um es dem Nutzer einfach zu machen. Aber mit fhem und der Möglichkeit der Fernsteuerung haben wir ja ein viel mächtigeres Tool als starre Wasserszenen mit starren Zeiten...


Ich werde demnächst mal die Device-Definition ändern und etwas "generischer" gestalten (zumindest kann ich es versuchen). Leider hab ich im Moment nicht allzuviel Zeit über.
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

SebastianStorb

#40
Hey Tobi, das hört sich ja richtig gut an!

Erstaunlicher Weise funktioniert die Steuerung jetzt bei mir wieder (evlt zu viele Anfragen an einem Tag?): Wenn ich im WebFrontend über FHEM etwas einstellte ändert sich der Parameter in der Anlage wie oben in der Fettschrift gezeigt. Nur Geduld braucht es dazu. Etwa bis zu 60 Sekunden kann es dauern bis der Befehl wirklich umgesetzt ist und im Jodo Web angezeigt wird bzw. die Anlage den Befehl auch umgesetzt hat.

Mit deinem set01 Befehl funktionierte es bei mir leider gar nicht. Jetzt habe ich noch etwas genauer wegen der Grad dH Einstellungen nachgeschaut. Hier sind die Parameter für die Einstellung der Wasserhärte aus meiner Anlage:

1 Grad Härte
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=1&da=0x1&role=customer&action=normal
2 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=2&da=0x1&role=customer&action=normal
3 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=3&da=0x1&role=customer&action=normal
4 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=4&da=0x1&role=customer&action=normal
5 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=5&da=0x1&role=customer&action=normal
6 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=6&da=0x1&role=customer&action=normal
7 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=7&da=0x1&role=customer&action=normal
8 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=8&da=0x1&role=customer&action=normal
9 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=9&da=0x1&role=customer&action=normal
10 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=a&da=0x1&role=customer&action=normal
11 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=b&da=0x1&role=customer&action=normal
12 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=c&da=0x1&role=customer&action=normal
13 Grad dH
https://www.myjudo.eu/interface/?token=%token%&group=register&command=write%20data&serial_number=%JUDO_serial%&dt=0x33&index=60&data=d&da=0x1&role=customer&action=normal


Es läuft hoch von 1&da bis 9&da dann wechselt es von a&da bis d&da


Ich werde das noch mal bei mir probieren und ggf. anpassen. Allerdings habe ich schon 10 set Befehle und mehr funktionieren scheinbar nicht, oder?

Deine Fragen:
1.) Sleeptime=1 bedeutet AN (das mach natürlich nur Sinn wenn eine Zeit mit gesendet wird)

Sleeptime=0 bedeutet AUS

oder Sleepteime= bedeutet auch AUS bzw. nicht gesetzt

2.) Die Abhängigkeit bzw. das Mitsenden der Sleeptime vermute ich wie folgt:
Wenn z.B. bei der Gartenbewässerung oder z.B. Schwimmbad-Befüllung die Wassermenge deutlich über dem Limit liegt, würde die Anlage sich selber den Hahn zudrehen, wenn das Limit erreicht ist. Daher wird der Sleeptimer (der den Wasserstop pausiert) mitgesendet.

3.) (UTC Zeit + Offset für Zeitzone)
d.h. also
disable_time=1657349540
16:57 Uhr und 34 Sekunden

Bevor Du mir Deine extrem gute Idee mit UTC hier verraten hast, hatte ich die Vermutung, dass noch eine Szene mitgesendet wird oder es ist eine Quersumme oder noch komplizierter ist. Noch eine Idee war, das  noch der Tag des Monats mitgegeben wird (wie im METAR Wetterbereich in der Fliegerei).

JETZT VERMUTE ICH ES IST a) die (Absende-) Zeit in UTC und dann die Soll (bzw. Laufzeit) in Sekunden. Könnte das sein?

Wobei es extrem ungenau wäre (also die Uhren bei Judo etwa 15 Minuten zu spät gehen würden).

Ich entferne beim Senden des Befehls z.Z. einfach die Zeit weg und lasse FHEM später wieder auf Normalbetrieb stellen. Das wäre natürlich super, wenn das irgendwann gehen sollte.

LG Sebastian


PS: Des Rätsels Lösung ist: Das sind die Sekunden, die seit dem 01.01.1970 vergangen sind. EpochConverter (unixtimestamp.com) - nur so etwas einzubauen benötigt einen Programmierer  ;D

tobi01001

Zitat von: SebastianStorb am 11 Juli 2022, 19:14:19
Mit deinem set01 Befehl funktionierte es bei mir leider gar nicht.
Der Device Type muss auf 0x33 angepasst werden. Und bei dir steht noch action=normal dabei. Das braucht man aber nicht, wenn man die Wasserhärte für den Normalbetrieb (per App über die Einstellungen) ändert...
Zitat
Es läuft hoch von 1&da bis 9&da dann wechselt es von a&da bis d&da
My bad... soweit habe ich nicht probiert. Offenbar wird die Wasserhärte Hexadezimal gesendet. Das fällt bei kleiner 10 nicht so auf ;-)

P.S.: Der Parametername folgt nach dem & und der Wert nach dem =, also läuft es hoch von data=1 bis data=d (=13). Wobei minimal und maximal mögliche Wasserhärte von der Rohhärte abhängen.

Zitat
Ich werde das noch mal bei mir probieren und ggf. anpassen. Allerdings habe ich schon 10 set Befehle und mehr funktionieren scheinbar nicht, oder?
Warum nicht, bzw. wofür brauchst du überhaupt mehr als 10 Set Befehle?
Zitat
Deine Fragen:
1.) Sleeptime=1 bedeutet AN (das mach natürlich nur Sinn wenn eine Zeit mit gesendet wird)

Sleeptime=0 bedeutet AUS

oder Sleepteime= bedeutet auch AUS bzw. nicht gesetzt

Nee, ich bin mir ziemlich sicher es bedeutet An (Sleep) für x Stunden (Ganzzahl) bzw 0 oder nix für aus.

Zitat
2.) Die Abhängigkeit bzw. das Mitsenden der Sleeptime vermute ich wie folgt:
Wenn z.B. bei der Gartenbewässerung oder z.B. Schwimmbad-Befüllung die Wassermenge deutlich über dem Limit liegt, würde die Anlage sich selber den Hahn zudrehen, wenn das Limit erreicht ist. Daher wird der Sleeptimer (der den Wasserstop pausiert) mitgesendet.

Ja, wobei es bei mir nur Alarm gäbe, da keine "safe". Aber die Frage nach unterschiedlichen Zeitangaben bleibt... Und ob eine Gartenbewässerung (geht bei mir eh an der Anlage vorbei) ohne Wasserstop in Sleep funktioniert (und sinnvoll ist).

Zitat
PS: Des Rätsels Lösung ist: Das sind die Sekunden, die seit dem 01.01.1970 vergangen sind. EpochConverter (unixtimestamp.com) - nur so etwas einzubauen benötigt einen Programmierer  ;D

Nee, braucht keinen Programmierer. gettimeofday()+3*HOURSECONDS sind 3 Stunden in der Zukunft. Alternativ mit time(). Ob da jetzt die Zeitzone bereits mit drin ist, weiß ich grad nicht... Das kann man als Parameter mit übergeben falls man nach einer gewissen Zeit zurück möchte. Aber es gibt ja meist vielfältige Wege...

Gruß,
Tobi
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

SebastianStorb

#42
ZitatDer Device Type muss auf 0x33 angepasst werden. Und bei dir steht noch action=normal dabei. Das braucht man aber nicht, wenn man die Wasserhärte für den Normalbetrieb (per App über die Einstellungen) ändert...
Den Device Type habe ich angepasst auf 0x33. Leider funktioniert es bei mir nicht. Die Action normal ist bei mir in jedem Fall erforderlich, weil Sonst die Timer aus den Szenen nicht gelöscht werden (z.B. wenn meine Frau eine Szene mit der Handy App eingestellt hat).

ZitatP.S.: Der Parametername folgt nach dem & und der Wert nach dem =, also läuft es hoch von data=1 bis data=d (=13). Wobei minimal und maximal mögliche Wasserhärte von der Rohhärte abhängen.
Bekomme ich leider auch nicht in FHEM umgesetzt.

Hier das Ende Deines Code:
da=0x1&role=customer&action=normal&data=$val
Das ist die Erfordernis an meinem Code Ende (für Grad 1 dH)
data=1&da=0x1&role=customer&action=normal
Ich habe überhaupt keine Ahnung wie ich das umsetzen sollte. Mit dem enfachen Wechsel auf 0x33 (da kann ich mich nur wiederholen) funktioniert es definitiv leider nicht.

ZitatWarum nicht, bzw. wofür brauchst du überhaupt mehr als 10 Set Befehle?
s. meinen Post #38 am 09 Juli 2022, 08:56:55. Dort sind unter den Fett markierten Überschriften die Attribute von mir gepostet worden

lg S

tobi01001

Zitat von: SebastianStorb am 12 Juli 2022, 19:31:06

Hier das Ende Deines Code:
da=0x1&role=customer&action=normal&data=$val
Das ist die Erfordernis an meinem Code Ende (für Grad 1 dH)
data=1&da=0x1&role=customer&action=normal

Ja, und bis auf die Reihenfolge und den Wert als Parameter ist das identisch. Und die Reihenfolge macht bei get aufrufen keinen Unterschied. Der Empfänger muss das eh parsen...
Der einzige Unterschied den ich noch sehe: ich habe die website (myjudo.eu) über Replacement - sprich %JUDO_ipaddress% drin und bei dir ist direkt die komplette URL.

Entweder postest du mal den Log-Eintrag mit Verbose 5 um zu sehen was raus geht und zurück kommt. Oder einfach auch mal deine Device Spezifikation. (Löschen von sensiblen Daten nicht vergessen.)

Bzgl Anzahl der set-Befehle: Deswegen hatte ich ja gefragt ;-) Die Wasserszenen und die Wunschhärte kann man ja jeweils in einem set Befehl zusammenfassen. Bekommen wir gemeinsam hin.
Die Attribute set[0-9]+IExpr und set[0-9]+IMap sollten sich dafür als hilfreich erweisen.

Gruß,
Tobi
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

SebastianStorb

#44
Du hast wieder Recht gehabt! Es funktioniert jetzt mit dem Code den ich unten gepostet habe. Aber ich muss meine Seriennummer eingeben und nicht %JUDO_serial%

s.u.

Mit der Seriennummer bzw. %JUDO_serial% ist wahrscheinlich irgendwo noch ein Copy&Paste Problem.

Aber: Die Einstellung wird nur im Bereich
https://www.myjudo.eu / Ju-Control / ->Einstellungen->Wasserwunschhärte
eingestellt.
Eine Übernahme in den Normalbetrieb unter
https://www.myjudo.eu / Ju-Control / ->Betriebsstaus ->Wunschwasserhärte
erfolgt leider nicht.
Hier muss erst eine andere Wasserszene z.B. Duschen eingestellt werden. Wenn dann wieder Normalbetrieb eingestellt wird übernimmt die JU die Wunschwasserhärte in den Normalbetrieb.

Im Browser wird immer noch folgendes hinterhergesendet:
https://www.myjudo.eu/interface/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=showlocation
https://www.myjudo.eu/interface/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=show&application=JC
https://www.myjudo.eu/interface/?token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&group=register&command=get device data


Ich muss es in den nächsten Tagen in den Log Dateien verfolgen. Als folge Deines (mit 33 abgewandelten) Code stellt sich die Anlage nach ca 1 Minute immer auf 13 dH. Egal in welcher Wasserszene, egal was wo eingestellt ist.

Hi Tobi - wahrscheinlich wirst Du es nicht glauben aber es liegt an der Reihenfolge im Code. So funktioniert es jetzt problemlos:
https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=write%20data&serial_number=HierMussImmerNochMeineSeriennummerRein&dt=0x33&index=60&data=$val&da=0x1&role=customer&action=normal

--> Die Anlage hängt sich auf. Der Code funktioniert nur wenn auch nicht
a) die Anlage (nach dem Einstellen einer Wasserszene) auf Werkeinstellungen gesetzt wurde und
b) keine Wasserszene eingestellt worden ist.

[/s]
Was auch noch nicht 100%ig geht ist das Problem, dass ich es bei den Judo Szenen (die ich wirklich praktisch finde) noch immer etwas hakelig ist. Ich bekomme es nicht hin den 01.01.1970 Code einzupflegen.

Hier der Auszug aus dem Logfile (mit dem ich nichts anfangen kann bzw. mir ist nicht klar was ich ändern muss, damit es funktionieren könnte).
2022.07.16 08:18:55 4: JUDO_iSoft: BodyDecode is not decoding the response body (charset utf-8, bodyDecode defaults to none)
2022.07.16 08:18:55 4: JUDO_iSoft: extracted JSON values to internal
2022.07.16 08:18:55 5: JUDO_iSoft: GetCookies is looking for Cookies
2022.07.16 08:18:55 5: JUDO_iSoft: ExtractSid called, context set, num 09
2022.07.16 08:18:55 4: JUDO_iSoft: checking for redirects, code=200, ignore=0
2022.07.16 08:18:55 4: JUDO_iSoft: no redirects to handle
2022.07.16 08:18:55 5: JUDO_iSoft: Read callback sets LAST_REQUEST to set09
2022.07.16 08:18:55 5: JUDO_iSoft: CheckAuth is checking buffer with ReAuthRegex (?^:"data":"login failed")
2022.07.16 08:18:55 5: JUDO_iSoft: CheckAuth decided no authentication required


022.07.16 08:18:55 5: JUDO_iSoft: set called with Resthaerte 6
2022.07.16 08:18:55 5: JUDO_iSoft: set found option Resthaerte in attribute set09Name
2022.07.16 08:18:55 5: JUDO_iSoft: checkRange for SetFn checks 6 against min 1
2022.07.16 08:18:55 5: JUDO_iSoft: checkRange for SetFn checks 6 against max 10
2022.07.16 08:18:55 4: JUDO_iSoft: set will now set Resthaerte -> 6
2022.07.16 08:18:55 5: JUDO_iSoft: AddToQueue adds type set09 to URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data, no data, no headers, retry 0, initial queue len: 0
2022.07.16 08:18:55 5: JUDO_iSoft: HandleSendQueue called from AddToSendQueue, qlen = 1
2022.07.16 08:18:55 5: JUDO_iSoft: Replace called for type set09, regex (?^:%token%), mode reading, value token input: https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace: reading value is XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2022.07.16 08:18:55 5: JUDO_iSoft: Replace: match for type set09, regex (?^:%token%), mode reading, value token, input: https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data, result is https://%JUDO_ipaddress%/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace called for type set09, regex (?^:%JUDO_ipaddress%), mode text, value www.myjudo.eu input: https://%JUDO_ipaddress%/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace: match for type set09, regex (?^:%JUDO_ipaddress%), mode text, value www.myjudo.eu, input: https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data, result is https://www.myjudo.eu/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace called for type set09, regex (?^:%JUDO_password%), mode text, value xxxxxxxxxxxxxxxxxxxxxxxxxinput: https://www.myjudo.eu/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace called for type set09, regex (?^:%JUDO_username%), mode text, value xxxxxxxxxxxxxxxxxxxxxxxxxxx input: https://www.myjudo.eu/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace called for type set09, regex (?^:%nohash%), mode text, value xxxxxxxxxxxxxxx input: https://www.myjudo.eu/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace called for type set09, regex (?^:%date%), mode reading, value date input: https://www.myjudo.eu/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 5: JUDO_iSoft: Replace called for type set09, regex (?^:%JUDO_serial%), mode reading, value xxxxxxxxxxxxxx input: https://www.myjudo.eu/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data
2022.07.16 08:18:55 4: JUDO_iSoft: HandleSendQueue sends set09 with timeout 5 to https://www.myjudo.eu/interface/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&group=register&command=get%20device%20data, No Data, No Header
2022.07.16 08:18:55 5: JUDO_iSoft: ReadCallback called from __ANON__
2022.07.16 08:18:55 4: JUDO_iSoft: Read callback: request type was set09 retry 0,
header: HTTP/1.1 200 OK


Ich befürchte, dass das Modul oder die Anlage oder die Kommunikation zwischen meinem Modul und Anlage nicht mehr funktioniert. Auch wenn ich im Judo-Webforntend etwas einstelle. z.B. Wasserszene Duschen, springt es zwar zunächst um, aber nach etwa 1 Minute ändert sich sie Wasserhärte. Gestern zu 12 Grad dH heute ist es 6 Grad dH.

Kannst Du mir Deine FHEM Definition für die Judo Logdatei sagen? Ich bekomme auch das nicht hin und muss immer mühsam im globalen Logfile nachsehen.