Hauptmenü

HTTPMOD - JUDO isoft Save

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

Vorheriges Thema - Nächstes Thema

ch.eick

Hallo zusammen,

ich habe das mal hier für Malte geöffnet :
==================================================================================================================
Guten Morgen,

ich versuche hier die "Safe" (also nicht Plus" Variante) in FHEM einzubinden. Bei der Safe muss man die Daten ja auf der Webseite myjudo.eu abrufen

Ich glaube mein Problem ist zuerst das ich keinen Token bekomme. Manuell funktioniert es:


https://www.myjudo.eu/interface/?group=register&command=login&name=login&user=MeinUser&password=MD5VomPasswort&nohash=Service&role=customer
{"status":"ok","token":"DerToken","role":"customer","notifications":{"email":"0","sms":"0","push":"0"},"startpage":null,"data":[],"servicenumber":""}

Userkonto + MD5 scheinen zu funktionieren.

Der Fehler
2020.11.09 07:52:52 5: JUDO_iSoft: get called with DeviceData
2020.11.09 07:52:52 5: JUDO_iSoft: get found option DeviceData in attribute get01Name
2020.11.09 07:52:52 4: JUDO_iSoft: get will now request DeviceData, no optional value
2020.11.09 07:52:52 5: JUDO_iSoft: AddToQueue adds type get01 to URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data, no data, header Content-Type: application/json
Accept: */*, retry 0, initial queue len: 0
2020.11.09 07:52:52 5: JUDO_iSoft: HandleSendQueue called, qlen = 1
2020.11.09 07:52:52 5: JUDO_iSoft: GetRegex found precompiled Regex for replacement01 as (?^:%token%)
2020.11.09 07:52:52 5: JUDO_iSoft: Replace called for type get01, regex (?^:%token%), mode reading, value token input: Content-Type: application/json
viele weitere Einträge...
2020.11.09 07:52:52 5: HttpUtils url=https://www.myjudo.eu/interface/?token=&group=register&command=get%20device%20data
2020.11.09 07:52:52 4: IP: www.myjudo.eu -> 178.15.150.126
2020.11.09 07:52:52 5: HttpUtils request header:
GET /interface/?token=&group=register&command=get%20device%20data HTTP/1.0
Host: www.myjudo.eu
User-Agent: fhem
Accept-Encoding: gzip,deflate
Content-Type: application/json
Accept: */*

2020.11.09 07:52:52 4: https://www.myjudo.eu/interface/?token=&group=register&command=get%20device%20data: HTTP response code 200
2020.11.09 07:52:52 5: HttpUtils https://www.myjudo.eu/interface/?token=&group=register&command=get%20device%20data: Got data, length: 0
2020.11.09 07:52:52 5: HttpUtils response header:
HTTP/1.1 200 OK
Date: Mon, 09 Nov 2020 06:52:52 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Access-Control-Allow-Origin: *
Content-Length: 0
Connection: close
Content-Type: application/json; charset=utf-8
2020.11.09 07:52:52 4: JUDO_iSoft: Read callback: request type was get01 retry 0,
header: HTTP/1.1 200 OK
Date: Mon, 09 Nov 2020 06:52:52 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Access-Control-Allow-Origin: *
Content-Length: 0
Connection: close
Content-Type: application/json; charset=utf-8, no body
2020.11.09 07:52:52 5: JUDO_iSoft: Read callback: body empty
2020.11.09 07:52:52 4: JUDO_iSoft: Read found charset header and set decoding to utf-8 (bodyDecode was set to auto)
2020.11.09 07:52:52 4: JUDO_iSoft: Read is decoding the buffer as utf-8
2020.11.09 07:52:52 5: JUDO_iSoft: GetCookies is looking for Cookies
2020.11.09 07:52:52 5: JUDO_iSoft: ExtractSid called, context get, num 01
2020.11.09 07:52:52 4: JUDO_iSoft: checking for redirects, code=200, ignore=0
2020.11.09 07:52:52 4: JUDO_iSoft: no redirects to handle
2020.11.09 07:52:52 5: JUDO_iSoft: GetRegex found precompiled reAuthRegex for  as (?^:(no token)|(not logged in))
2020.11.09 07:52:52 5: JUDO_iSoft: CheckAuth is checking buffer with ReAuthRegex (?^:(no token)|(not logged in))
2020.11.09 07:52:52 5: JUDO_iSoft: CheckAuth decided no authentication required
2020.11.09 07:52:52 5: JUDO_iSoft: ExtractReading DeviceData with json data ...
2020.11.09 07:52:52 5: JUDO_iSoft: ExtractReading DeviceData did not match
2020.11.09 07:52:52 3: JUDO_iSoft: no parsed JSON structure available
2020.11.09 07:52:52 4: JUDO_iSoft: Read response to get01 didn't match any Reading
2020.11.09 07:52:52 5: JUDO_iSoft: HandleSendQueue called, qlen = 0


Eigentlich sollte doch sid01URL zuerst aufgerufen werden. Also die URL zum abrufen des Token, anschließend mit dem Token den eigentlichen URL aufruf (welcher manuell auch funktioniert -> lange JSON "Liste").
Außer den selbst angelegten Readings erscheint nichts auf der Device - Übersicht.



Definiert ist das ganze mit:
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%/?group=waterstop&command=valve&msgnumber=4&token=%token% 300
setuuid JUDO_iSoft ..
attr JUDO_iSoft userattr get01JSON get01Name get01URL get02JSON get02Name get02URL getHeader1 getHeader2 reading01JSON reading01Name reading01Regex reading02JSON reading03JSON reading03OExpr replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value replacement04Mode:reading,internal,text,expression,key replacement04Regex replacement04Value replacement05Mode:reading,internal,text,expression,key replacement05Regex replacement05Value replacement06Mode:reading,internal,text,expression,key replacement06Regex replacement06Value sid01ParseResponse:0,1 sid01URL
attr JUDO_iSoft authRetries 2
attr JUDO_iSoft enableControlSet 1
attr JUDO_iSoft extractAllJSON 1
attr JUDO_iSoft get01JSON data
attr JUDO_iSoft get01Name DeviceData
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
attr JUDO_iSoft get02JSON data
attr JUDO_iSoft get02Name WaterConsumptionDay
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%date=%date%&parameter=day
attr JUDO_iSoft getHeader1 Content-Type: application/json
attr JUDO_iSoft getHeader2 Accept: */*
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)
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 reading03OExpr $val =~ s/\s/-/;; $val;; readingsBulkUpdate($hash,$val,ReadingsVal("JUDO_iSoft","data",""))
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 Md5HashPasswort
attr JUDO_iSoft replacement04Mode text
attr JUDO_iSoft replacement04Regex %JUDO_username%
attr JUDO_iSoft replacement04Value MeinUser
attr JUDO_iSoft replacement05Mode text
attr JUDO_iSoft replacement05Regex %JUDO_serial%
attr JUDO_iSoft replacement05Value Seriennummer/MacAdresse im Format 12345678
attr JUDO_iSoft replacement06Mode reading
attr JUDO_iSoft replacement06Regex %date%
attr JUDO_iSoft replacement06Value date
attr JUDO_iSoft room SmartDevices
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=Service&role=customer
attr JUDO_iSoft timeout 5
attr JUDO_iSoft 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))/1  ). ' g'}, saltRange { hex ( substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","DeviceData-50", ''), 4, 2)). " Tage" }


Vielen Dank
Malte
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

Sooo,

ich kann folgendes in der Rückmeldung vom Portal nicht finden

attr JUDO_iSoft reAuthRegex (no token)|(not logged in)

somit wird auch nicht zum sid01 verzweigt.

Setze auch mal

showBody 1

dann kannst Du die Rückmeldung direkt im httpbody sehen.

Damit reAuthRegex reagieren kann, muss der String "(no token)" oder "(not logged in)" in der Rückmeldung vom Portal zu sehen sein.

Bei der manuellen Anmeldung schickst Du auch das hier mit

{"status":"ok","token":"DerToken","role":"customer","notifications":{"email":"0","sms":"0","push":"0"},"startpage":null,"data":[],"servicenumber":""}


das wäre dann beim sid01 z.B. sowas, was ich in Deiner Definition nicht erkennen kann.

set01Data {"status":"ok","token":"DerToken","role":"customer","notifications":{"email":"0","sms":"0","push":"0"},"startpage":null,"data":[],"servicenumber":""}


Auch wenn es viele Meldungen zu dem Device im Log sind, schicke sie bitte alle mit, um die Analyse zu machen.
Bereinigen solltest Du nur die, die von anderen Devices noch dazwischen kommen :-)
Wenn es zu lang ist, dann bitte als fhemlog.txt anhängen, da ansonsten der Post irgendwann abgeschnitten würde.

Viele Grüße und Entschuldigung, wenn ich Dich ausgelagert habe.
    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

maltejahn

Hallo Christian,

Dank schon einmal. Das mit dem neuen Beitrag passe.

Eine Anfrage um an einen Token zu kommen ergibt bei richtigem Passwort:
{"status":"ok","token":"DerToken","role":"customer","notifications":{"email":"0","sms":"0","push":"0"},"startpage":null,"data":[],"servicenumber":""}
ein falscher ergibt:
"status":"error","data":"Login failed"}

-> geändert habe ich dann
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)
zu
attr JUDO_iSoft reAuthRegex (error)|(Login failed)
-> jetzt kommt ein Token der auch funktioniert.
-> Jetzt kommen Daten!


Der "State" vom Device bleibt allerdings "? ? ?"
Aber, ich gestehe ich hab es nicht verstanden.

Es gibt die:
https://%JUDO_ipaddress%/interface/?group=register&command=login&name=login&user=%JUDO_username%&password=%JUDO_password%&nohash=Service&role=customer
welche mir ein JSON mit Token liefert und
[code]get01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data[/code]
Welche die tatsächlichen Nutzdaten als JSON liefert.

Aber definiert wurde das ganze mit (lt. WIki) mit
DEF https://%JUDO_ipaddress%/?group=waterstop&command=valve&msgnumber=4&token=%token% 300


Weil der Aufruf lädt die HTML myJudo im eingeloggten zustand herunter (siehe Anhang, verbose 5)

Im Log erscheint "nur" noch (ohne "Verbose"
2020.11.09 11:49:16 3: JUDO_iSoft: error while parsing JSON data: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "<!DOCTYPE html>\r\n<...") at (eval 18457) line 1.

2020.11.09 11:49:17 3: JUDO_iSoft: error while parsing JSON data: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "<!DOCTYPE html>\r\n<...") at (eval 18469) line 1.

2020.11.09 11:49:18 3: JUDO_iSoft: error while parsing JSON data: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "<!DOCTYPE html>\r\n<...") at (eval 18497) line 1.

2020.11.09 11:49:18 3: JUDO_iSoft: no parsed JSON structure available

weil die URL der Definiton ja eine HTML und keine JSON ist.

Müsste das Device nicht eher
https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
definiert sein

Ganz zu schweigen hiervon
https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%date=%date%&parameter=day
https://wiki.fhem.de/wiki/JUDO_iSoft_Plus
->ich<- finde da keine Entsprechungen im HTML. Aber das ist wieder eine andere Gechichte


Im Anhang der log zu folgendem Eintrag:
setuuid JUDO_iSoft vieleZahlen
attr JUDO_iSoft userattr get01JSON get01Name get01URL get02JSON get02Name get02URL getHeader1 getHeader2 reading01JSON reading01Name reading01Regex reading02JSON reading03JSON reading03OExpr replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value replacement04Mode:reading,internal,text,expression,key replacement04Regex replacement04Value replacement05Mode:reading,internal,text,expression,key replacement05Regex replacement05Value replacement06Mode:reading,internal,text,expression,key replacement06Regex replacement06Value sid01ParseResponse:0,1 sid01URL
attr JUDO_iSoft authRetries 2
attr JUDO_iSoft enableControlSet 1
attr JUDO_iSoft extractAllJSON 1
attr JUDO_iSoft get01JSON data
attr JUDO_iSoft get01Name DeviceData
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
attr JUDO_iSoft getHeader1 Content-Type: application/json
attr JUDO_iSoft getHeader2 Accept: */*
attr JUDO_iSoft reAuthRegex (error)|(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 reading03OExpr $val =~ s/\s/-/;; $val;; readingsBulkUpdate($hash,$val,ReadingsVal("JUDO_iSoft","data",""))
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 Passwort
attr JUDO_iSoft replacement04Mode text
attr JUDO_iSoft replacement04Regex %JUDO_username%
attr JUDO_iSoft replacement04Value Username
attr JUDO_iSoft replacement05Mode text
attr JUDO_iSoft replacement05Regex %JUDO_serial%
attr JUDO_iSoft replacement05Value Seriennummer
attr JUDO_iSoft replacement06Mode reading
attr JUDO_iSoft replacement06Regex %date%
attr JUDO_iSoft replacement06Value date
attr JUDO_iSoft room SmartDevices
attr JUDO_iSoft showBody 1
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=Service&role=customer
attr JUDO_iSoft timeout 5
attr JUDO_iSoft 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" }


maltejahn

Hallo,

ganz funktioniert es nicht. Der Token wird abgeholt, den Abruf der Daten müsse ich über get im Device selbst triggern.

Grüße
Malte


ch.eick

Hi

Schön, Du bekommst schon eine Antwort.

Das ist zu unspezifisch, da in der JSON Antwort der String error auch vorkommt!

JSON Ausschnitt: ,"errors":[],"waterscene_time":null,"waterscene_time_garden":null,
attr JUDO_iSoft reAuthRegex (error)|(Login failed)

Deshalb kommt auch:
2020.11.09 11:39:07 4: JUDO_iSoft: CheckAuth decided new authentication required

Und es looped bis
attr JUDO_iSoft authRetries 2

2020.11.09 11:39:19 4: JUDO_iSoft: Authentication still required but no retries left - did last authentication fail?

Das solltest Du schon mal beheben, dann wird das Log auch kürzer :-)

Wie die Daten ausgelesen werden kann ich noch nicht so vollständig erkennen.
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

Zitat von: maltejahn am 09 November 2020, 12:57:56
ganz funktioniert es nicht. Der Token wird abgeholt, den Abruf der Daten müsse ich über get im Device selbst triggern.
Schau dazu mal in meine Antwort, die hat etwas länger gedauert.
Der Abruf der Daten kommt als Schritt zwei, wenn das Login nicht mehr looped.
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

maltejahn

Guten Morgen,

also, jetzt geht es. Allerdings verstehe ich nicht, warum als Def

https://%JUDO_ipaddress%/?group=waterstop&command=valve&msgnumber=4&token=%token% 300
im Wiki verwendet wurde. Als Antwort kommt hier eine "HTML" anstatt einer JSON. Ist das einzig dafür da, um den Token auf Gültigkeit zu prüfen? Mit dem Verbose Level kann ich es im Log verschwinden lassen, frage mich nur ob es notwendig ist.

Mit dem jetzigen Device klappt es jedenfalls, einzig musste ich das abrufen von "Device Data" noch triggern:
get01Poll 1
get01PollDelay 300


Der direkte Aufruf von Einträgen, damit muß ich mich mal beschäftigen. Vor allem, wie komme ich an die "commands"
Im Wiki
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%date=%date%&parameter=day
Zitat%date=%date%
müsste doch eigentlich
&date=%date%
sein.

Ergibt:
get02URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%&date=%date%&parameter=day
führt im Log zu
Zitathttps://www.myjudo.eu/interface/?token=MeinToken&group=register&command=get_chart_data&serialnumber=%JUDO_serial&date=12112020¶meter=day
Was passiert den mit dem Wort parameter, ist das nur ein Fehler in der Darstellung? Bei manuellem Aufruf bekomme ich ein JSON mit
{"status":"requested"} was auch im Log erscheint - scheint also nur die Darstellung zu sein.
Im Device erscheint dann "Status requested", aber Daten kamen keine.

anstatt:
ZitatHier bekommt man einen Zeile zurück wobei immer 8 Zeichen zusammen die LiterZahl (als Hex) bilden. Zeichen 0-8 - Verbrauch von 0-3 Uhr Zeichen 9-16 - Verbrauch von 3-6 Uhr usw.

Das gesamte Device sieht nun so aus:

defmod JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%/?group=waterstop&command=valve&msgnumber=4&token=%token% 300
attr JUDO_iSoft userattr get01JSON get01Name get01Poll:0,1 get01PollDelay get01URL get02JSON get02Name get02URL getHeader1 getHeader2 reading01JSON reading01Name reading01Regex reading02JSON reading03JSON reading03OExpr replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value replacement04Mode:reading,internal,text,expression,key replacement04Regex replacement04Value replacement05Mode:reading,internal,text,expression,key replacement05Regex replacement05Value replacement06Mode:reading,internal,text,expression,key replacement06Regex replacement06Value sid01ParseResponse:0,1 sid01URL
attr JUDO_iSoft authRetries 2
attr JUDO_iSoft enableControlSet 1
attr JUDO_iSoft extractAllJSON 1
attr JUDO_iSoft get01JSON data
attr JUDO_iSoft get01Name DeviceData
attr JUDO_iSoft get01Poll 1
attr JUDO_iSoft get01PollDelay 300
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
attr JUDO_iSoft get02JSON data
attr JUDO_iSoft get02Name WaterConsumptionDay
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%&date=%date%&parameter=day
attr JUDO_iSoft getHeader1 Content-Type: application/json
attr JUDO_iSoft getHeader2 Accept: */*
attr JUDO_iSoft reAuthRegex "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 reading03OExpr $val =~ s/\s/-/;; $val;; readingsBulkUpdate($hash,$val,ReadingsVal("JUDO_iSoft","data",""))
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 MeinPasswort
attr JUDO_iSoft replacement04Mode text
attr JUDO_iSoft replacement04Regex %JUDO_username%
attr JUDO_iSoft replacement04Value MeinUser
attr JUDO_iSoft replacement05Mode text
attr JUDO_iSoft replacement05Regex %JUDO_serial%
attr JUDO_iSoft replacement05Value MeineSeriennummer
attr JUDO_iSoft replacement06Mode reading
attr JUDO_iSoft replacement06Regex %date%
attr JUDO_iSoft replacement06Value date
attr JUDO_iSoft room SmartDevices
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=Service&role=customer
attr JUDO_iSoft timeout 5
attr JUDO_iSoft 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" },date {(strftime '%d%m%Y', localtime)}
attr JUDO_iSoft verbose 5


Im Logfile zuerst der automatisierte Aufruf um die Daten abzufragen, dann manuell getriggert die Abfrage WaterConsumptionDay

ch.eick

#7
Zitat von: maltejahn am 12 November 2020, 08:01:44
also, jetzt geht es. Allerdings verstehe ich nicht, warum als Def

https://%JUDO_ipaddress%/?group=waterstop&command=valve&msgnumber=4&token=%token% 300
im Wiki verwendet wurde. Als Antwort kommt hier eine "HTML" anstatt einer JSON. Ist das einzig dafür da, um den Token auf Gültigkeit zu prüfen? Mit dem Verbose Level kann ich es im Log verschwinden lassen, frage mich nur ob es notwendig ist.
Bei def kannst Du den Aufruf eintragen, den Du regelmäßig haben möchtest, oder auch anstatt 300 einfach 0 eintragen, dann wird es garnicht abgerufen.


Zitat
Der direkte Aufruf von Einträgen, damit muß ich mich mal beschäftigen. Vor allem, wie komme ich an die "commands"
Im Wiki
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%date=%date%&parameter=daymüsste doch eigentlich
&date=%date%
sein.

Ergibt:
get02URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%&date=%date%&parameter=day
führt im Log zu Was passiert den mit dem Wort parameter, ist das nur ein Fehler in der Darstellung? Bei manuellem Aufruf bekomme ich ein JSON mit
{"status":"requested"} was auch im Log erscheint - scheint also nur die Darstellung zu sein.
Im Device erscheint dann "Status requested", aber Daten kamen keine.
Wahrscheinlich haben nicht so viele die isoft Save und der, der damit angefangen hat, hat eventuell auf halbem Weg aufgehört.
Was falsch ist oder nicht mehr zum jetzigen Portal passt könntest Du ja im Wiki korrigieren.
So habe ich es mit dem isoft Plus gemacht, damit es jetzt gurt verwendet werden kann. Den Thread hier hast Du ja schon mal für die Kommunikation.

Eventuell machst Du noch ein schönes stateFormat und wenn alles rund läuft stellst Du es hier nochmal vor.

Hier nochmal das stateFormat von dem isoft Plus, wenn Du es anpassen und verwenden möchtest.

{
my $l1   = ReadingsVal("$name","waterstop_State", "");
my $l2   = ReadingsVal("$name","waterstop_FlowRate", "")." l";
my $l3   = ReadingsVal("$name","waterstop_Quantity", "")." l";
my $l4   = ReadingsVal("$name","waterstop_AbstractionTime", "")." Min";
my $l5   = ReadingsVal("$name","waterstop_Vacation", "");
my $l6   = ReadingsVal("$name","waterstop_Standby", "");
my $d1   = ReadingsVal("$name","consumption_ActualQuantity", "")." l";
my $d2   = ReadingsVal("$name","consumption_WaterAverage", "")." l";
my $d3   = ReadingsVal("$name","consumption_WaterCurrentSoft", "")." l";
my $d4   = ReadingsVal("$name","consumption_WaterCurrentRaw", "")." l";
my $d5   = ReadingsVal("$name","consumption_WaterTotalSoft", "")." l";
my $d6   = ReadingsVal("$name","consumption_WaterTotalRaw", "")." l";
my $v1   = ReadingsVal("$name","consumption_WaterTotalRaw", "")." l";
my $v2   = ReadingsVal("$name","consumption_WaterDailySumme", "")." l";
my $v3   = ReadingsVal("$name","consumption_WaterWeeklySumme", "")." l";
my $h1   = ReadingsVal("$name","info_NaturalHardness", "")." °dH";
my $h2   = ReadingsVal("$name","settings_ResidualHardness", "")." °dH";
my $s1   = ReadingsVal("$name","consumption_SaltQuantityInPercent", "")." %";
my $s2   = ReadingsVal("$name","consumption_SaltRangeInWeeks", "")." W";
my $s3   = ReadingsVal("$name","consumption_SaltRangeInDays", "")." T";

"<html><table border=2 bordercolor='darkgreen' cellspacing=0>
<tr><td style='padding-right:5px;padding-left:5px;font-weight:bold'>Leckageschutz</td><td style='padding-right:5px;padding-left:5px;font-weight:bold'>Einstellung</td><td style='padding-right:5px;padding-left:5px;font-weight:bold'>Wasser</td><td style='padding-right:5px;padding-left:5px;font-weight:bold'>Verbrauch</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>Status</td><td style='padding-right:5px;padding-left:5px'>".$l1."</td><td style='padding-right:5px;padding-left:5px;font-weight:bold'>gesamt</td><td style='padding-right:5px;padding-left:5px'>".$v1."</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>Max Durchfluss</td><td style='padding-right:5px;padding-left:5px'>".$l2."</td><td style='padding-right:5px;padding-left:5px;font-weight:bold'>aktuell</td><td style='padding-right:5px;padding-left:5px'> </td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Entnahme</td><td style='padding-right:5px;padding-left:5px'>".$l3."</td><td style='padding-right:5px;padding-left:5px;font-weight:bold'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tag</td><td style='padding-right:5px;padding-left:5px'>".$v2."</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Entnahmedauer</td><td style='padding-right:5px;padding-left:5px'>".$l4."</td><td style='padding-right:5px;padding-left:5px;font-weight:bold'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Woche</td><td style='padding-right:5px;padding-left:5px'>".$v3."</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>Urlaubsmodus</td><td style='padding-right:5px;padding-left:5px'>".$l5."</td><td style='padding-right:5px;padding-left:5px'> </td><td style='padding-right:5px;padding-left:5px'> </td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>Sleepmodusdauer</td><td style='padding-right:5px;padding-left:5px'>".$l6."</td><td style='padding-right:5px;padding-left:5px'> </td><td style='padding-right:5px;padding-left:5px'> </td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'> </td><td style='padding-right:5px;padding-left:5px'> </td><td style='padding-right:5px;padding-left:5px'> </td><td style='padding-right:5px;padding-left:5px'> </td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>Wasser</td><td style='padding-right:5px;padding-left:5px;font-weight:bold'>Menge</td><td style='padding-right:5px;padding-left:5px;font-weight:bold'>Wasserhärte</td><td style='padding-right:5px;padding-left:5px'> </td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>Durchfluss aktuell</td><td style='padding-right:5px;padding-left:5px'>".$d1."</td><td style='padding-right:5px;padding-left:5px;font-weight:bold'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;natürlich</td><td style='padding-right:5px;padding-left:5px'>".$h1."</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Durchschnitt</td><td style='padding-right:5px;padding-left:5px'>".$d2."</td><td style='padding-right:5px;padding-left:5px;font-weight:bold'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wunsch</td><td style='padding-right:5px;padding-left:5px'>".$h2."</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Soft</td><td style='padding-right:5px;padding-left:5px'>".$d3."</td><td style='padding-right:5px;padding-left:5px;font-weight:bold'>Salzvorrat</td><td style='padding-right:5px;padding-left:5px'> </td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Raw</td><td style='padding-right:5px;padding-left:5px'>".$d4."</td><td style='padding-right:5px;padding-left:5px;font-weight:bold'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menge</td><td style='padding-right:5px;padding-left:5px'>".$s1."</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Soft gesamt</td><td style='padding-right:5px;padding-left:5px'>".$d5."</td><td style='padding-right:5px;padding-left:5px;font-weight:bold'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reichweite</td><td style='padding-right:5px;padding-left:5px'>".$s2."</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Raw gesamt</td><td style='padding-right:5px;padding-left:5px'>".$d6."</td><td style='padding-right:5px;padding-left:5px;font-weight:bold'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reichweite</td><td style='padding-right:5px;padding-left:5px'>".$s3."</td></tr>
</table></html>"
}


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

thanatos

Hallo Malte, hallo Christian,

ich habe selbst eine soft Save (ohne PLUS) und bin leider bzgl. der Programmierkenntnisse nicht so fit wie ihr. Ich habe mich gerade riesig gefreut, dass ihr euch an das Thema der iSoft Save gewagt habt. Ich habe mir mal die code Schnipsel von Malte geschnappt und User / Passwort / Serialnummer eingetragen. Leider klappt es nicht auf anhiebt. Das hatte ich ehrlich gesagt auch nicht erwartet. ;)
Wenn ich den token aus einer manuellen Anmeldung auf der Webseite kopiere und hinterlege und die Definition von:

attr JUDO_iSoft replacement01Mode reading
attr JUDO_iSoft replacement01Regex %token%
attr JUDO_iSoft replacement01Value *geheimer token*


auf


attr JUDO_iSoft replacement01Mode text
attr JUDO_iSoft replacement01Regex %token%
attr JUDO_iSoft replacement01Value *geheimer token*


ändere, klappt die Anmeldung.

Die readings sind teilweise scheinbar nicht sinnvoll skaliert ;=)



DeviceData login failed 2020-12-27 14:42:09
DeviceData-1 0x1 2020-12-27 16:20:03
DeviceData-10 OK 2020-12-27 16:20:03
DeviceData-11 680902 2020-12-27 16:20:03
DeviceData-12 2020-12-27 16:20:03
DeviceData-13 OK 2020-12-27 16:20:03
DeviceData-14 0A05 2020-12-27 16:20:03
DeviceData-15 2020-12-27 16:20:03
DeviceData-16 OK 2020-12-27 16:20:03
DeviceData-17 FFB90200 2020-12-27 16:20:03
DeviceData-18 2020-12-27 16:20:03
DeviceData-19 OK 2020-12-27 16:20:03
DeviceData-2 0 2020-12-27 16:20:03
DeviceData-20 26139601 2020-12-27 16:20:03
DeviceData-21 2020-12-27 16:20:03
DeviceData-22 OK 2020-12-27 16:20:03
DeviceData-23 24 2020-12-27 16:20:03
DeviceData-24 2020-12-27 16:20:03
DeviceData-25 OK 2020-12-27 16:20:03
DeviceData-26 5DD04EC0 2020-12-27 16:20:03
DeviceData-27 2020-12-27 16:20:03
DeviceData-28 OK 2020-12-27 16:20:03
DeviceData-29 0:00030F30020010000400160110036400000000000000B81EC006190220003F00 2020-12-27 16:20:03
DeviceData-3 2020-12-27 16:20:03
DeviceData-30 2020-12-27 16:20:03
DeviceData-31 OK 2020-12-27 16:20:03
DeviceData-32 1:C0000000024708072821F700FE00000079002200000001000000910C39069202 2020-12-27 16:20:03
DeviceData-33 2020-12-27 16:20:03
DeviceData-34 OK 2020-12-27 16:20:03
DeviceData-35 2:003C78000000000048005201DC05DC0578000001DC05DC05000FB903780000FF 2020-12-27 16:20:03
DeviceData-36 2020-12-27 16:20:03
DeviceData-37 OK 2020-12-27 16:20:03
DeviceData-38 4E1E01000100 2020-12-27 16:20:03
DeviceData-39 2020-12-27 16:20:03
DeviceData-4 OK 2020-12-27 16:20:03
DeviceData-40 OK 2020-12-27 16:20:03
DeviceData-41 2270300 2020-12-27 16:20:03
DeviceData-42 2020-12-27 16:20:03
DeviceData-43 OK 2020-12-27 16:20:03
DeviceData-44 1600 2020-12-27 16:20:03
DeviceData-45 2020-12-27 16:20:03
DeviceData-46 OK 2020-12-27 16:20:03
DeviceData-47 0 2020-12-27 16:20:03
DeviceData-48 2020-12-27 16:20:03
DeviceData-49 OK 2020-12-27 16:20:03
DeviceData-5 0 2020-12-27 16:20:03
DeviceData-50 01010B4BAB 2020-12-27 16:20:03
DeviceData-51 2020-12-27 16:20:03
DeviceData-52 OK 2020-12-27 16:20:03
DeviceData-53 7E686B00 2020-12-27 16:20:03
DeviceData-54 2020-12-27 16:20:03
DeviceData-55 OK 2020-12-27 16:20:03
DeviceData-56 E1730200 2020-12-27 16:20:03
DeviceData-57 2020-12-27 16:20:03
DeviceData-58 OK 2020-12-27 16:20:03
DeviceData-59 27/12/2020 - 16:19:4 2020-12-27 16:20:03
DeviceData-6 2020-12-27 16:20:03
DeviceData-60 0x33 2020-12-27 16:20:03
DeviceData-61 5.10 2020-12-27 16:20:03
DeviceData-62 2.9h 2020-12-27 16:20:03
DeviceData-63 2020-12-27 16:20:03
DeviceData-64 1 2020-12-27 16:20:03
DeviceData-65 4 2020-12-27 16:20:03
DeviceData-66 1 2020-12-27 16:20:03
DeviceData-67 10 2020-12-27 16:20:03
DeviceData-68 1.0 2020-12-27 16:20:03
DeviceData-69 2019-11-15T13:54:22 2020-12-27 16:20:03
DeviceData-7 OK 2020-12-27 16:20:03
DeviceData-70 *geheim* 2020-12-27 16:20:03
DeviceData-71 online 2020-12-27 16:20:03
DeviceData-72 1.11 2020-12-27 16:20:03
DeviceData-73 0 2020-12-27 16:20:03
DeviceData-74 normal 2020-12-27 16:20:03
DeviceData-75 4 2020-12-27 16:20:03
DeviceData-76 1 2020-12-27 16:20:03
DeviceData-77 1 2020-12-27 16:20:03
DeviceData-8 2D139601 2020-12-27 16:20:03
DeviceData-9 2020-12-27 16:20:03
LAST_ERROR gethostbyname www.myjudo.eu failed 2020-12-27 15:29:24
command get device data 2020-12-27 16:20:03
data login failed 2020-12-27 14:42:09
data_01_data_01_da 0x1 2020-12-27 16:20:03
data_01_data_01_data_10_data 0 2020-12-27 16:20:03
data_01_data_01_data_10_er 2020-12-27 16:20:03
data_01_data_01_data_10_st OK 2020-12-27 16:20:03
data_01_data_01_data_12_data 0 2020-12-27 16:20:03
data_01_data_01_data_12_er 2020-12-27 16:20:03
data_01_data_01_data_12_st OK 2020-12-27 16:20:03
data_01_data_01_data_14_data 2D139601 2020-12-27 16:20:03
data_01_data_01_data_14_er 2020-12-27 16:20:03
data_01_data_01_data_14_st OK 2020-12-27 16:20:03
data_01_data_01_data_1_data 680902 2020-12-27 16:20:03
data_01_data_01_data_1_er 2020-12-27 16:20:03
data_01_data_01_data_1_st OK 2020-12-27 16:20:03
data_01_data_01_data_2_data 0A05 2020-12-27 16:20:03
data_01_data_01_data_2_er 2020-12-27 16:20:03
data_01_data_01_data_2_st OK 2020-12-27 16:20:03
data_01_data_01_data_3_data FFB90200 2020-12-27 16:20:03
data_01_data_01_data_3_er 2020-12-27 16:20:03
data_01_data_01_data_3_st OK 2020-12-27 16:20:03
data_01_data_01_data_5_data 26139601 2020-12-27 16:20:03
data_01_data_01_data_5_er 2020-12-27 16:20:03
data_01_data_01_data_5_st OK 2020-12-27 16:20:03
data_01_data_01_data_63_data 24 2020-12-27 16:20:03
data_01_data_01_data_63_er 2020-12-27 16:20:03
data_01_data_01_data_63_st OK 2020-12-27 16:20:03
data_01_data_01_data_6_data 5DD04EC0 2020-12-27 16:20:03
data_01_data_01_data_6_er 2020-12-27 16:20:03
data_01_data_01_data_6_st OK 2020-12-27 16:20:03
data_01_data_01_data_790_data 0:00030F30020010000400160110036400000000000000B81EC006190220003F00 2020-12-27 16:20:03
data_01_data_01_data_790_er 2020-12-27 16:20:03
data_01_data_01_data_790_st OK 2020-12-27 16:20:03
data_01_data_01_data_791_data 1:C0000000024708072821F700FE00000079002200000001000000910C39069202 2020-12-27 16:20:03
data_01_data_01_data_791_er 2020-12-27 16:20:03
data_01_data_01_data_791_st OK 2020-12-27 16:20:03
data_01_data_01_data_792_data 2:003C78000000000048005201DC05DC0578000001DC05DC05000FB903780000FF 2020-12-27 16:20:03
data_01_data_01_data_792_er 2020-12-27 16:20:03
data_01_data_01_data_792_st OK 2020-12-27 16:20:03
data_01_data_01_data_7_data 4E1E01000100 2020-12-27 16:20:03
data_01_data_01_data_7_er 2020-12-27 16:20:03
data_01_data_01_data_7_st OK 2020-12-27 16:20:03
data_01_data_01_data_8_data 2270300 2020-12-27 16:20:03
data_01_data_01_data_8_er 2020-12-27 16:20:03
data_01_data_01_data_8_st OK 2020-12-27 16:20:03
data_01_data_01_data_90_data 1600 2020-12-27 16:20:03
data_01_data_01_data_90_er 2020-12-27 16:20:03
data_01_data_01_data_90_st OK 2020-12-27 16:20:03
data_01_data_01_data_92_data 0 2020-12-27 16:20:03
data_01_data_01_data_92_er 2020-12-27 16:20:03
data_01_data_01_data_92_st OK 2020-12-27 16:20:03
data_01_data_01_data_93_data 01010B4BAB 2020-12-27 16:20:03
data_01_data_01_data_93_er 2020-12-27 16:20:03
data_01_data_01_data_93_st OK 2020-12-27 16:20:03
data_01_data_01_data_94_data 7E686B00 2020-12-27 16:20:03
data_01_data_01_data_94_er 2020-12-27 16:20:03
data_01_data_01_data_94_st OK 2020-12-27 16:20:03
data_01_data_01_data_9_data E1730200 2020-12-27 16:20:03
data_01_data_01_data_9_er 2020-12-27 16:20:03
data_01_data_01_data_9_st OK 2020-12-27 16:20:03
data_01_data_01_data_lu 27/12/2020 - 16:19:4 2020-12-27 16:20:03
data_01_data_01_dt 0x33 2020-12-27 16:20:03
data_01_data_01_hv 5.10 2020-12-27 16:20:03
data_01_data_01_sv 2.9h 2020-12-27 16:20:03
data_01_disable_time 2020-12-27 16:20:03
data_01_hardness_heater 1 2020-12-27 16:20:03
data_01_hardness_shower 4 2020-12-27 16:20:03
data_01_hardness_washing 1 2020-12-27 16:20:03
data_01_hardness_watering 10 2020-12-27 16:20:03
data_01_hv 1.0 2020-12-27 16:20:03
data_01_installation_date 2019-11-15T13:54:22 2020-12-27 16:20:03
data_01_serialnumber *geheim* 2020-12-27 16:20:03
data_01_status online 2020-12-27 16:20:03
data_01_sv 1.11 2020-12-27 16:20:03
data_01_update 0 2020-12-27 16:20:03
data_01_waterscene normal 2020-12-27 16:20:03
data_01_waterscene_normal 4 2020-12-27 16:20:03
data_01_waterscene_time 1 2020-12-27 16:20:03
data_01_waterscene_time_garden 1 2020-12-27 16:20:03
date 27122020 2020-12-27 16:20:03
saltLevel 382 g 2020-12-27 16:20:03
saltRange 19211 Tage 2020-12-27 16:20:03
status ok 2020-12-27 16:20:03
token *geheim* 2020-12-27 16:20:03
waterProcessed 7039.102 m³ 2020-12-27 16:20:03
waterTotal 206.594 m³ 2020-12-27 16:20:03


Besonders schön fand ich die 382g Salz für eine Reichweite von 19211 Tage. ;) Hier schient entweder eine Zuordnung oder eine Skalierung nicht zu passen.
Gibt es irgendeine Übersicht der Ausgaben der Judo iSofte Save?

Meine größten Probleme sind aktuell:

1) Die Anmelderoutine, da der Token ja mal ablaufen wird...
2) Die Zuordnung und Skalierung der Readings, hier fehlt mir aktuell eine Ansatzpunkt der Zuordnung bzw. Decodierung...

@Malte: Gibt es bei dir etwas neues zu deinem Code?

Danke jedenfalls an euch beide für diesen tollen Ansatz der Einbindung der i Soft save. :)

Grüße,
Marcus

ch.eick

Hallo Marcus.

Schau Dir mal HTTPMOD dazu an. Dieses attr liest aus einem reading

attr JUDO_iSoft replacement01Mode reading
attr JUDO_iSoft replacement01Regex %token%
attr JUDO_iSoft replacement01Value *geheimer token*


Hier liest Du Value als Text

attr JUDO_iSoft replacement01Mode text
attr JUDO_iSoft replacement01Regex %token%
attr JUDO_iSoft replacement01Value *geheimer token*


Wenn Du Dich eingearbeitet hast kannst Du auch Mode key verwenden, das würde dann aus dem KeyStore lesen und den Key nicht sichtbar ablegen.

Bei den readings von der Seite kann ich leider nicht helfen.

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

thanatos

Hallo Christian,

vielen Dank für die schnelle Rückmeldung. Vor lauter Ausprobieren und Brettern vor dem Kopf hatte ich den Code etwas zerstört gehabt. Ich habe es jetzt wieder auf folgendes geändert:


attr JUDO_iSoft replacement01Mode reading
attr JUDO_iSoft replacement01Regex %token%
attr JUDO_iSoft replacement01Value token


irgendwie war ich davon versessen, dort meinen token als "token" eintragen zu müssen.  ::) Naja, du hast mir da etwas die Augen geöffnet. Danke.

Jetzt klappt die Anmeldung, das Password habe ich als MD5Hash eingetragen, das scheint zu klappen, soweit ich das beurteilen kann.
Jetzt gilt es die Daten zu entschlüsseln...

@Malte: Was mir noch aufgefallen war mit der Abfrage:


https://www.myjudo.eu/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%geheim%&date=27122020&parameter=day


bekomme ich im Browser auch zuerst ein


{"status":"requested"}


wenn man dann die Seite aktualisiert, kommen jedoch bei mir die Daten:


{"status":"ok","data":"000000000000000000000011000000970000006B0000001B0000000800000000"}


Jetzt müsste ich mal die Doku lesen, wie man mit HTTPMOD einen wiederholten Seitenaufruf macht... mal gucken...  ;D

Grüße,
Marcus

maltejahn

Hallo,

war ewig nicht mehr hier.

Bisher funktioniert es gut, allerdings gibt es auch wenig zu nutzen. Einzig den momentanen Durchfluss und die Gesamtmenge betrachte ich mir. Die Salzmenge - naja. So Smart ist das Teil nicht. Es scheint einfach nur 250g/Tag abzuziehen.
Bei den UserReadings nutze ich also nur das Ergebnis von waterTotal , saltLevel (witzlos) und durchflussaktuell

defmod JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data 30\
\

attr JUDO_iSoft userattr get01Poll:0,1 replacement01Mode:reading,internal,text,expression,key replacement02Mode:reading,internal,text,expression,key replacement03Mode:reading,internal,text,expression,key replacement04Mode:reading,internal,text,expression,key replacement05Mode:reading,internal,text,expression,key replacement06Mode:reading,internal,text,expression,key sid01ParseResponse:0,1
attr JUDO_iSoft authRetries 2
attr JUDO_iSoft enableControlSet 1
attr JUDO_iSoft event-on-change-reading .*
attr JUDO_iSoft extractAllJSON 1
attr JUDO_iSoft get01JSON data
attr JUDO_iSoft get01Name DeviceData
attr JUDO_iSoft get01Poll 0
attr JUDO_iSoft get01PollDelay 300
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data
attr JUDO_iSoft get02JSON data
attr JUDO_iSoft get02Name WaterConsumptionDay
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get_chart_data&serialnumber=%JUDO_serial%date=%date%&parameter=day
attr JUDO_iSoft getHeader1 Content-Type: application/json
attr JUDO_iSoft getHeader2 Accept: */*
attr JUDO_iSoft oldreadings waterTotal, zeitdesreadings
attr JUDO_iSoft reAuthRegex "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 reading03OExpr $val =~ s/\s/-/;; $val;; readingsBulkUpdate($hash,$val,ReadingsVal("JUDO_iSoft","data",""))
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 Hash
attr JUDO_iSoft replacement04Mode text
attr JUDO_iSoft replacement04Regex %JUDO_username%
attr JUDO_iSoft replacement04Value Benutzer
attr JUDO_iSoft replacement05Mode text
attr JUDO_iSoft replacement05Regex %JUDO_serial%
attr JUDO_iSoft replacement05Value 682719c9aa33
attr JUDO_iSoft replacement06Mode reading
attr JUDO_iSoft replacement06Regex %date%
attr JUDO_iSoft replacement06Value date
attr JUDO_iSoft room SmartDevices
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=Service&role=customer
attr JUDO_iSoft timeout 5
attr JUDO_iSoft userReadings waterTotal { ( hex ( substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_8_data", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_8_data", ''), 4, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_8_data", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_8_data", ''), 0, 2)) / 1000 ). ' '},\
saltLevel { ( hex ( substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_94_data", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_94_data", ''), 0, 2))  ). ' g'},saltRange { (hex ( substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_94_data", ''), 6, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_94_data", ''), 4, 2))). " Tage" },rohhaerte { (hex ( substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_90_data", ''), 2, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_90_data", ''), 0, 2)) ). " °dH" },\
durchflussaktuell { (hex ( substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_790_data", ''), 36, 2).substr(ReadingsVal("JUDO_iSoft","data_01_data_01_data_790_data", ''), 34, 2))  ). " l/h" }
attr JUDO_iSoft verbose 3

setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-1 0x1
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-10 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-11 680902
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-12
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-13 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-14 0A05
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-15
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-16 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-17 C5230300
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-18
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-19 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-2 00
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-20 21131200
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-21
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-22 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-23 24
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-24
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-25 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-26 5FA40607
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-27
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-28 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-29 0:00030F3000001000081616001D03A000000000000000C901E0061A0230004900
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-3
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-30
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-31 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-32 1:C00000000A3D9D081618CB00C10000005C001700000001006700910C12001200
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-33
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-34 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-35 2:003C1E000000000047000000A00F2C011E000306A00F2C010016DF031E0000FF
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-36
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-37 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-38 752000000000
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-39
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-4 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-40 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-41 CF180000
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-42
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-43 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-44 1600
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-45
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-46 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-47 0000
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-48
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-49 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-5 00
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-50 01010B64B5
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-51
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-52 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-53 BA5E6100
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-54
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-55 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-56 D00F0000
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-57
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-58 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-59 24/11/2020 - 10:41:3
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-6
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-60 0x33
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-61 5.10
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-62 2.9h
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-63 1
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-64 4
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-65 1
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-66 10
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-67 1.0
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-68 2020-11-05T14:27:57
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-69 Seriennummer
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-7 OK
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-70 online
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-71 1.11
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-72 0
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-73 8
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-8 26131200
setstate JUDO_iSoft 2020-11-24 10:41:06 DeviceData-9
setstate JUDO_iSoft 2021-02-10 14:41:49 LAST_ERROR connect to https://www.myjudo.eu:443 timed out
setstate JUDO_iSoft 2021-02-11 16:27:50 command get-device data:
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_da 0x1
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_10_data 00
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_10_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_10_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_12_data 00
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_12_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_12_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_14_data 26006200
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_14_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_14_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_1_data 680902
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_1_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_1_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_2_data 0A05
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_2_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_2_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_3_data C5230300
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_3_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_3_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_5_data 1F006200
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_5_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_5_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_63_data 24
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_63_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_63_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_6_data 5FA410DD
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_6_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_6_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_790_data 0:00030F300000100008061500E9026C00000000000000C8087906180230001F00
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_790_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_790_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_791_data 1:C0000000001EA513161CCF00C10000005C001700000001006900910C54005400
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_791_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_791_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_792_data 2:003C1E000000000048000000A00F2C011E000306A00F2C010016E3031E0000FF
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_792_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_792_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_7_data 081900000000
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_7_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_7_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_8_data 88760000
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_8_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_8_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_90_data 1500
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_90_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_90_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_92_data 0000
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_92_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_92_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_93_data 01010B64B1
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_93_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_93_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_94_data 461E2100
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_94_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_94_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_9_data 374B0000
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_9_er
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_9_st OK
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_data_lu 11/2/2021 - 16:27:3
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_dt 0x33
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_hv 5.10
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_data_01_sv 2.9h
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_hardness_heater 1
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_hardness_shower 4
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_hardness_washing 1
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_hardness_watering 10
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_hv 1.0
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_installation_date Installdatum
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_serialnumber Seriennummer
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_status online
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_sv 1.11
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_update 0
setstate JUDO_iSoft 2021-02-11 16:27:50 data_01_waterscene_normal 8
setstate JUDO_iSoft 2021-02-11 16:27:50 durchflussaktuell 0 l/h
setstate JUDO_iSoft 2021-02-11 16:17:35 get-device data
setstate JUDO_iSoft 2021-02-11 16:27:50 get-device data
setstate JUDO_iSoft 2020-11-10 10:49:23 notifications_email 0
setstate JUDO_iSoft 2020-11-10 10:49:23 notifications_push 0
setstate JUDO_iSoft 2020-11-10 10:49:23 notifications_sms 0
setstate JUDO_iSoft 2021-02-11 16:27:50 rohhaerte 21 °dH
setstate JUDO_iSoft 2020-11-10 10:49:23 role customer
setstate JUDO_iSoft 2021-02-11 16:27:50 saltLevel 7750 g
setstate JUDO_iSoft 2021-02-11 16:27:50 saltRange 33 Tage
setstate JUDO_iSoft 2020-11-10 10:49:23 servicenumber
setstate JUDO_iSoft 2021-02-11 16:27:50 status ok
setstate JUDO_iSoft 2021-02-11 16:27:50 token einToken
setstate JUDO_iSoft 2021-02-11 16:27:50 waterTotal 30.344




Vielleicht klappt es mit dem ?!?

Grüße
Malte



ch.eick

Zitat von: maltejahn am 11 Februar 2021, 16:48:12
Bisher funktioniert es gut, allerdings gibt es auch wenig zu nutzen. Einzig den momentanen Durchfluss und die Gesamtmenge betrachte ich mir. Die Salzmenge - naja. So Smart ist das Teil nicht. Es scheint einfach nur 250g/Tag abzuziehen.
Bezieht sich das Save auf die Funktionalität? :-) Oder auf einen gesicherten Zugriff?
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

Kohle77

Hallo,
haben inzwischen auch eine i-Soft Safe.
Angefangen habe ich auch mit diesem Wicki https://wiki.fhem.de/wiki/JUDO_iSoft_Plus
Als erstes bin ich dort über drei / gestolpert in
attr JUDO_iSoft get01JSON data
attr JUDO_iSoft get01Name DeviceData
attr JUDO_iSoft get01URL https:///%JUDO_ipaddress%/interface/?token=%token%&group=register&command=get%20device%20data


aber grundsätzlich bekomme ich auch readings angezeigt.
Habe aber das gleiche Problem. Was steckt hinter diesen Daten??

Hat inzwischen dort jemand Erfahrung wie man dort was richtiges angezeigt bekommt?

Gruß
Christian

ch.eick

Zitat von: Kohle77 am 09 August 2021, 06:08:33
Habe aber das gleiche Problem. Was steckt hinter diesen Daten??
Hallo Christian,
ich habe zwar eine iSoft Plus, aber die Daten werden sich nicht so sehr unterscheiden.
Wie sehen denn die gelieferten Daten aus, die Du mit "get device data bekommst?

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