Ökofen Heizung via HTTP Json fehler bei der Verarbeitung

Hallo zusammen,

Heute stehe ich mal wieder etwas auf dem Schlauch, und hoffe das mir einige Profis hier einen Tipp geben können.

Gestern ging unsere Ökofen Heizung in Betrieb, diese versuche ich nun via HTTP Json auszulesen.

Die Json wird über eine URL abgeholt und liefert alle möglichen werte, diese rufe ich über „file_get_contents“ ab. Ich bekomme in der ausgabe „$json“ denn String auch zurück, leider kann er aber nicht über „json_decode“ decodiert werden. Dort bekomme ich ein NULL zurück.

Schreibe ich aber denn selben zuvor Abgerufenen Inhalt in eine PHP Variabel funktioniert es einwandfrei.

Und daher weiß ich jetzt nicht weiter…

Ich bedanke mich für eure Hilfe :wink:

LG
Sven

<?php


$json = '{
 "system":{
  "L_ambient":13, 
  "L_errors":0, 
  "L_usb_stick":0, 
  "L_existing_boiler":0
 },
 "hk1":{
  "L_roomtemp_act":0, 
  "L_roomtemp_set":80, 
  "L_flowtemp_act":199, 
  "L_flowtemp_set":80, 
  "L_comfort":0, 
  "L_state":8, 
  "L_statetext":"Betriebsart Aus",
  "L_pump":0, 
  "remote_override":0, 
  "mode_auto":0, 
  "time_prg":0, 
  "temp_setback":180, 
  "temp_heat":220, 
  "temp_vacation":150, 
  "name":"", 
  "oekomode":0, 
  "autocomfort":-1, 
  "autocomfort_sunset":0, 
  "autocomfort_sunrise":0
 },
 "hk2":{
  "L_roomtemp_act":0, 
  "L_roomtemp_set":80, 
  "L_flowtemp_act":187, 
  "L_flowtemp_set":80, 
  "L_comfort":0, 
  "L_state":8, 
  "L_statetext":"Betriebsart Aus",
  "L_pump":0, 
  "remote_override":0, 
  "mode_auto":0, 
  "time_prg":0, 
  "temp_setback":180, 
  "temp_heat":220, 
  "temp_vacation":150, 
  "name":"Fußbodenheiz", 
  "oekomode":0, 
  "autocomfort":-1, 
  "autocomfort_sunset":0, 
  "autocomfort_sunrise":0
 },
 "pu1":{
  "L_tpo_act":229, 
  "L_tpo_set":80, 
  "L_tpm_act":222, 
  "L_tpm_set":80, 
  "L_pump_release":80, 
  "L_pump":0, 
  "L_state":512, 
  "L_statetext":"Anforderung Aus",
  "mintemp_off":80, 
  "mintemp_on":80, 
  "ext_mintemp_off":80, 
  "ext_mintemp_on":80
 },
 "ww1":{
  "L_temp_set":80, 
  "L_ontemp_act":488, 
  "L_offtemp_act":229, 
  "L_pump":0, 
  "L_state":4, 
  "L_statetext":"Betriebsart Aus",
  "time_prg":0, 
  "sensor_on":0, 
  "sensor_off":1, 
  "mode_auto":0, 
  "mode_dhw":1, 
  "heat_once":0, 
  "temp_min_set":350, 
  "temp_max_set":550, 
  "name":"", 
  "smartstart":0, 
  "use_boiler_heat":0, 
  "oekomode":0
 },
 "sk1":{
  "L_koll_temp":26, 
  "L_spu":227, 
  "L_pump":0, 
  "L_state":32, 
  "L_statetext":"Differenz Kollektor-Speicher zu niedrig",
  "mode":1, 
  "cooling":0, 
  "spu_max":900, 
  "name":""
 },
 "pe1":{
  "L_temp_act":381, 
  "L_temp_set":80, 
  "L_ext_temp":-32768, 
  "L_frt_temp_act":399, 
  "L_frt_temp_set":80, 
  "L_frt_temp_end":80, 
  "L_br":0, 
  "L_ak":0, 
  "L_not":1, 
  "L_stb":1, 
  "L_modulation":0, 
  "L_runtimeburner":0, 
  "L_resttimeburner":0, 
  "L_currentairflow":0, 
  "L_lowpressure":556, 
  "L_lowpressure_set":800, 
  "L_fluegas":0, 
  "L_uw_speed":0, 
  "L_state":99, 
  "L_statetext":"Aus",
  "L_type":1, 
  "L_starts":16, 
  "L_runtime":2, 
  "L_avg_runtime":7, 
  "L_uw_release":600, 
  "L_uw":0, 
  "L_storage_fill":1935, 
  "L_storage_min":1500, 
  "L_storage_max":15000, 
  "L_storage_popper":65, 
  "storage_fill_today":0, 
  "storage_fill_yesterday":0, 
  "mode":1
 },
   "error":{
   }
}';


//$json = file_get_contents("http://192.168.65.132:4321/845g4L/all");

$data = json_decode($json,true);

print_r ($json);

//echo $data['system']['L_ambient'];

var_export ($data);


Was liefert json_last_error_msg() nach dem decode?
Eventuell musst du beim decode noch eine Flags setzen.
Michael

Das hier: Malformed UTF-8 characters, possibly incorrectly encodedNULL

Okay, und wie behebe ich das Problem :smirk:

das hier Funktioniert…

$data = json_decode($json, true, JSON_INVALID_UTF8_IGNORE, JSON_INVALID_UTF8_SUBSTITUTE);

Aber ist das die richtige Lösung?

Lg

Wenn der Inhalt dennoch stimmt…warum nicht.
Eventuell liegt es aber auch daran wie file_get_contents das lädt. Das hier z.b. falsches encoding angefragt oder zurückgeben wird.
Löst ein uft8_encode($json) auch das Problem?
Kannst ja auch andere Funktionen zum Laden ausprobieren, wie Sys_GetURLContent.
Michael

Warum machst du es so kompliziert? mit dem Jason Encoder bekommst du die Werte doch auch ganz easy.
Problem dabei ist jedoch das ich die 230 nicht teilen kann (1/10).

Gruß
Stephen

Genau, und schalten kann man auch nicht :slight_smile: Daher musste was eigenes her :wink:

Hast du eine fertige Zuordnung welcher Wert was genau ist? Bei einigen bin ich mir da dann nicht so 100% sicher,…

Welche möchtest du denn wissen?
Bestimmt kann ich helfen :wink:

1 „Gefällt mir“

@shishalive
Am einfachsten wären natürlich alle,…
Dann kann ich mir die relevanten raussuchen,…
Falls du eine Liste hast,…
Bei Ökofen konnte mir keiner so recht helfen,…

Gruß
Stephen

Hallo zusammen, ist schon ein bisschen Zeit vergangen, aber ich möchte auch gerne meine Heizung einbinden. Lesen der JSON geht, aber ich würde auch gerne etwas schalten Können… Geht das mit der hier beschrieben Möglichkeit? Könnt ihr da weiterhelfen?

Vielen Dank