Integracja z Solarassistant

adams1692
Posts: 23
Joined: Tue Feb 18, 2025 5:06 pm

Post

Cześć,

Z uwagi na to, ze jestem zielony w temacie i posiłkowałem się do tej pory czatem gpt, proszę o wyrozumiałość 😀. Chciałbym zintegrować solarassistanta z suplą, konkretnie wyciągnąć informację o naładowaniu baterii. Obecnie korzystam z mosqitto na Windowsie, w solarze mam uruchomionego brokera mqtt i po wywołaniu komendy w shellu, pobiera mi te informacje, które chce. Problem pojawia sie kiedy te dane chcę wysłać do supli. Z tego co wyczytałem, na publicznym cloud nie da sie utworzyć wirtualnego kanału. Zrobiłem więc kanał fizyczny na wemosie z odczytem wilgotnosci. Czat utworzył mi skrypt w Pythonie, który teoretycznie powinien wysyłać dane do supli, jednak tego nie robi. Kod wygląda tak:

Code: Select all

import paho.mqtt.client as mqtt
import requests

# --- KONFIGURACJA MQTT ---
MQTT_BROKER = "xxx"
MQTT_PORT = 1883
MQTT_TOPIC = "solar_assistant/battery/soc"

# --- KONFIGURACJA SUPLA ---
SUPLA_URL = "https://svrXX.supla.org"  # np. https://svr14.supla.org
SUPLA_CHANNEL_ID = 12345               # ID czujnika w SUPLI
SUPLA_AUTH_TOKEN = "twoj_token_z_supli"  # Token z Cloud -> API

# Funkcja wysyłająca dane do SUPLI
def send_to_supla(soc_value):
    url = f"{SUPLA_URL}/api/v2.3/channels/{SUPLA_CHANNEL_ID}/executions"
    headers = {
        "Authorization": f"Bearer {SUPLA_AUTH_TOKEN}",
        "Content-Type": "application/json"
    }
    data = {
        "action": "SET_VALUE",
        "value": float(soc_value)
    }
    response = requests.post(url, json=data, headers=headers)
    print(f"[SUPLA] Status: {response.status_code}, Odpowiedź: {response.text}")

# Gdy MQTT odbierze dane:
def on_message(client, userdata, msg):
    value = msg.payload.decode()
    print(f"[MQTT] {msg.topic} = {value}")
    send_to_supla(value)

# Połącz z MQTT
client = mqtt.Client()
client.on_message = on_message
client.connect(MQTT_BROKER, MQTT_PORT, 60)
client.subscribe(MQTT_TOPIC)
print(f"[MQTT] Subskrybuję: {MQTT_TOPIC}")
client.loop_forever()
Czy możecie sprawdzić co z tym kodem jest nie tak? Oczywiście wszystkie dane do serwera i brokera podaje prawidlowe. W ogóle jest możliwe wysyłanie tych danych na fizyczny kanał na wemosie? Lub istnieje jakieś inne rozwiązanie? Siedzę juz na tym 4 dzień, wiec prośba o wsparcie 🙂
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Nie da się przez API zmienić wartości kanału. Tylko urządzenie, które ten kanał stworzyło może ustawiać mu wartość.
W SuplaDevice jest przykład dla Linuxa, tzw sd4linux. Możesz tym wrzucić sobie tego typu integrację.
Najlepsze suple dla Twojego domu :mrgreen:
adams1692
Posts: 23
Joined: Tue Feb 18, 2025 5:06 pm

Post

klew wrote: Wed Jul 09, 2025 10:29 am Nie da się przez API zmienić wartości kanału. Tylko urządzenie, które ten kanał stworzyło może ustawiać mu wartość.
W SuplaDevice jest przykład dla Linuxa, tzw sd4linux. Możesz tym wrzucić sobie tego typu integrację.
Super to dla mnie bardzo duzo, dziękuję 🙂

Return to “Pomoc”