Portál AbcLinuxu, 10. prosince 2025 14:42
victron/status:
{
"id": "victron",
"type": "status",
"timestamp": 1691347644,
"device_state_id": 9,
"device_state_name": "charge",
"mains_u": 236.33,
"mains_i": 2.11,
"inv_u": 236.33,
"inv_i": 1.83,
"inv_p": 111,
"out_p": 75,
"bat_u": 50,
"bat_i": 0.1,
"bat_p": 5,
"soc": 194,
"led_light": 9,
"led_blink": 0,
"led_info": [
"mains",
"float"
],
"state": "on"
}
(commandlinový jq je tvůj kamarád)
Na tom MQTT mají různé komponenty subscribnuté topicy kterým se jim dávají příkazy (typicky komponenta/set, třeba když do tilt/set/absolute_deg publikuju 10 tak se anténa naklopí na 10°). A dále je věc co je subscribnutá na skoro všechno a tlačí to do Influxu (tomu nerozumím, dělá to kolega) a z toho se to pak grafuje v Grafaně. A dále si můžeš pustit CLI / webový tool, který ukazuje všechny ty topicy a co v nich je aktuálně za data. A dále se můžeš subscribnout přes mosquitto_sub a prostě to padá na stdout. A dále monitoring, že ty parametry nevybočují. Atd.
Bulk a streamová data (v našem případě vyloženě kvadraturní signály každého odběhu) přenášíme přes ZeroMQ, což je tenká abstrakce nad běžnými sockety, ale nemusíš řešit že se ti klient připojí/odpojí nebo že by se chtělo připojit víc klientů a nemusíš řešit rozdělování streamu do zpráv, a dokonce to umí multipart messages (což se v Pythonu pak objeví jako seznam bytestringů). ZeroMQ má velmi schůdný tutoriál přímo na webu a má překvapivě malý výkonový overhead.
Dále bych doporučoval nepsat to v C, je to moc lowlevel a strašný pain tam tyhle datové věci dělat (protože to nemá slovníky, seznamy, i blbé stringy se musí alokovat a řešit), ale v něčem víc high-level a pokud tam máš pár funkcí co nutně vyžadují C (výkon, přístup k HW) tak jen ty napsat v C a volat přes CFFI, o tom jsem tu psal.
nemá slovníky, seznamyPoužiješ glib.
blbé stringy se musí alokovatMáš napríklad strdup() alebo strndup().
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.